199 votes

Manière pythonique de retourner la liste de chaque article dans une liste plus grande

Supposons que nous ayons une liste de nombres de zéro à 1000. Existe-t-il un moyen efficace / pythonique de produire une liste du premier et de tous les dix items suivants? c'est à dire. [0, 10, 20, 30 ...]

Oui, je peux le faire en utilisant une boucle for, mais je me demande s’il existe un moyen plus ordonné de le faire, peut-être même sur une seule ligne?

338voto

Ned Deily Points 40248
 >>> l = range(165)
>>> l[0::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
 

EDIT: juste pour le plaisir, une petite comparaison de timing (en ignorant la condition limite):

 $ python -m timeit -s "l = range(1000)" "l1 = [x for x in l if x % 10 == 0]"
1000 loops, best of 3: 525 usec per loop
$ python -m timeit -s "l = range(1000)" "l1 = l[0::10]"
100000 loops, best of 3: 4.02 usec per loop
 

62voto

Denis Otkidach Points 13111
  1. source_list[0::10] est le plus évident, mais cela ne fonctionne pas pour toutes les itérations et la mémoire n'est pas efficace pour les grandes listes.
  2. itertools.islice(source_sequence, 0, None, 10) fonctionne pour toutes les itérations et est efficace dans la mémoire, mais n'est probablement pas la solution la plus rapide pour les grandes listes et les grandes étapes.
  3. (source_list[i] for i in xrange(0, len(source_list), 10))

26voto

Nick Dandoulakis Points 26809

Vous pouvez utiliser l'opérateur slice comme ceci:

 l = [1,2,3,4,5]
l2 = l[::2] # get subsequent 2nd item
 

23voto

tuergeist Points 3718

Du manuel: s[i:j:k] slice of s from i to j with step k

 li = range(100); sub = li[0::10]
>>> sub
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
 

13voto

David Z Points 49476
 newlist = oldlist[::10]
 

Cela sélectionne tous les 10 éléments de la liste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X