J'essaie de faire une liste avec des nombres 1-1000
dedans. Évidemment, cela serait ennuyeux d’écrire/de lire, alors j’essaie de faire une liste avec une plage. En Python 2, il semble que:
some_list = range(1,1000)
aurait fonctionné, mais dans Python 3, la plage est similaire à la variable xrange
de Python 2?
Quelqu'un peut-il donner un aperçu de cela?
Vous pouvez simplement construire une liste à partir de l'objet range:
my_list = list(range(1, 1001))
Voici comment vous le faites avec les générateurs de python2.x. En règle générale, vous n’avez probablement pas besoin d’une liste car vous pouvez utiliser la valeur de my_list[i]
de manière plus efficace (i + 1
), et si vous avez juste besoin de la parcourir, vous pouvez simplement recourir à range
.
Notez également que sur python2.x, xrange
est toujours indexable.1. Cela signifie que range
sur python3.x a également la même propriété2
1print xrange(30)[12]
fonctionne pour python2.x
2La déclaration analogue à 1 dans python3.x est print(range(30)[12])
et cela fonctionne aussi.
En Pythons <= 3.4, vous pouvez, comme le suggèrent d’autres, utiliser list(range(10))
afin de faire une liste hors d’une plage (En général, toute valeur itérable).
Une autre alternative, introduite dans Python 3.5
avec ses généralisations de décompression, consiste à utiliser *
dans une liste littérale []
:
>>> r = range(10)
>>> l = [*r]
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Bien que cela soit équivalent à list(r)
, sa syntaxe littérale et le fait qu’aucun appel de fonction n’est impliqué ne le permettent pas de s’exécuter plus rapidement. C'est aussi moins de caractères, si vous avez besoin de coder le golf :-)
La raison pour laquelle Python3 n’a pas de fonction permettant d’obtenir directement une liste à distance est que le concepteur original de Python3 était assez novice dans Python2. Il n'a envisagé que l'utilisation de la fonction range () dans une boucle for; par conséquent, la liste ne devrait jamais avoir besoin d'être développée. En fait, très souvent, nous devons utiliser la fonction range () pour générer une liste et la passer à une fonction.
Par conséquent, dans ce cas, Python3 est moins pratique que Python2 pour les raisons suivantes:
Néanmoins, vous pouvez toujours utiliser le développement de liste de cette manière:
[*range(N)]
Vous ne devriez vraiment pas avoir besoin d'utiliser les numéros 1 à 1000 dans une liste. Mais si, pour une raison quelconque, vous avez vraiment besoin de ces chiffres, vous pouvez faire:
[i for i in range(1, 1001)]
Liste Compréhension en quelques mots:
La compréhension de la liste ci-dessus se traduit par:
nums = []
for i in range(1, 1001):
nums.append(i)
Ceci est juste la syntaxe de compréhension de liste, bien qu'à partir de 2.x. Je sais que cela fonctionnera en python 3, mais je ne suis pas sûr s'il existe également une syntaxe mise à niveau.
La plage commence, y compris le premier paramètre; mais se termine jusqu’à, non compris le deuxième paramètre (lorsque 2 paramètres sont fournis; si le premier paramètre est désactivé, il commence à «0»)
range(start, end+1)
[start, start+1, .., end]
En fait, si vous voulez 1-1000 (inclus), utilisez la fonction range(...)
avec les paramètres 1 et 1001: range(1, 1001)
, car la fonction range(start, end)
passe de début à (fin-1), inclus.
En fait, il s’agit d’une rétro-gradation de Python3 par rapport à Python2. Certes, Python2 qui utilise range () et xrange () est plus pratique que Python3 qui utilise respectivement list (range ()) et range (). La raison en est que le concepteur original de Python3 n’est pas très expérimenté, ils ont seulement envisagé l’utilisation de la fonction de plage par de nombreux débutants pour effectuer une itération sur un grand nombre d’éléments où la mémoire et le processeur sont inefficaces; mais ils ont négligé l’utilisation de la fonction range pour produire une liste numérique. Maintenant, il est trop tard pour qu'ils reviennent déjà.
Si je devais être le concepteur de Python3, je vais:
Cela devrait être optimal.
Utilisez Range en Python 3.
Voici un exemple de fonction qui retourne entre les nombres de deux nombres
def get_between_numbers(a, b):
"""
This function will return in between numbers from two numbers.
:param a:
:param b:
:return:
"""
x = []
if b < a:
x.extend(range(b, a))
x.append(a)
else:
x.extend(range(a, b))
x.append(b)
return x
Résultat
print(get_between_numbers(5, 9))
print(get_between_numbers(9, 5))
[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]