Python liste d'initialisation à l'aide de plusieurs états gamme
Je veux une longue liste, dire [1,2,3,4,5,15,16,17,18,19] comme un exemple. Pour initialiser ce, j'essaie de taper:
new_list = [range(1,6),range(15,20)]
Mais ce n'est pas faire ce que je veux, le retour:
[[1, 2, 3, 4, 5], [15, 16, 17, 18, 19]]
Quand je fais:
len(new_list)
Il renvoie 2, au lieu de 10 éléments que je voulais (car il a fait 2 listes à l'intérieur de la liste). Évidemment, dans cette exemple je pourrais vous suffit de taper ce que je veux, mais je vais essayer de le faire pour certains impairs itéré listes qui vont comme:
new_list = [range(101,6284),8001,8003,8010,range(10000,12322)]
Désireux de 1-D de la liste au lieu d'une liste de listes (ou de ce qu'il est préférable de l'appelé). Je devine que c'est vraiment facile et je suis en manque, mais après un peu de recherche, je suis venu avec rien de trop utile. Des idées?
OriginalL'auteur jackd | 2012-12-19
Vous devez vous connecter pour publier un commentaire.
Essayez ceci pour Python 2.x:
Ou si vous utilisez Python3.x, essayez ceci:
Pour traiter les éléments de l'entre-deux, pour Python 2.x:
Et, enfin, sur les éléments entre-deux, pour Python 3.x:
Les aspects clés à retenir ici est que en Python 2.x
range
renvoie une liste et en Python 3.x elle renvoie un objet iterable (il doit donc être explicitement convertis à une liste). Et que pour l'ajout de dresser la liste, vous pouvez utiliser le+
opérateur.Est-il un moyen facile d'insérer le nombre de célibataires entre les deux, le tout dans une ligne? Je devine que je pourrais ajouter à chacun, mais il y a très peu espacés de façon sporadique entre la liste des déclarations, merci pour l'aide.
mise à jour de ma réponse. Juste emballer dans un seul élément de la liste, comme suit:
range(1,3) + [3] + range(4,6)
Vous avez déjà eu, j'étais tout simplement trop lent pour avis, merci c'est exactement ce dont j'avais besoin. Simple, il suffit de n'arrivais pas à trouver le bon mot clé de recherche, à la terre sur la réponse!
ce qui supprime les retours à la ligne..
OriginalL'auteur Óscar López
Vous pouvez utiliser itertools.la chaîne pour aplatir la sortie de votre
range()
appels.À l'aide de
xrange
(ou simplementrange()
pour python3) pour obtenir un objet iterable et en enchaînant ensemble ne signifie qu'une liste d'objet est créé (aucun intermédiaire des listes nécessaire).Si vous avez besoin d'insérer des valeurs intermédiaires, il suffit d'inclure une liste ou un tuple de la chaîne:
Pour inclure une valeur unique, assurez-vous que c'est un élément unique dans un itérable, par exemple
tuple(8001)
ou[8001]
oulist(8001)
, sinon il faudra ajouter8
,0
,0
, et1
.Merci, c'est certainement la peine de souligner. Sera mise à jour de réponse.
OriginalL'auteur Shawn Chin
range
renvoie une liste pour commencer, de sorte que vous devez enchaîner avec+
ou de l'utilisationappend()
ouextend()
.ou
Sinon, vous pouvez utiliser
itertools.chain()
comme le montre Shawn Menton réponse.OriginalL'auteur Silas Ray
Essayez ceci:
De sortie comme tu le voulais:
OriginalL'auteur jackcogdill
je voudrais proposer u une version sans +
OriginalL'auteur Mikhail