web-dev-qa-db-fra.com

python: itérer une plage spécifique dans une liste

Disons que j'ai une liste:

listOfStuff =([a,b], [c,d], [e,f], [f,g])

Ce que je veux faire, c'est parcourir les 2 composants du milieu d'une manière similaire au code suivant:

for item in listOfStuff(range(2,3))
   print item

Le résultat final devrait être:

[c,d]
[e,f]

Ce code ne fonctionne pas actuellement, mais j'espère que vous pouvez comprendre ce que j'essaie de faire.

25
ccwhite1
listOfStuff =([a,b], [c,d], [e,f], [f,g])

for item in listOfStuff[1:3]:
    print item

Vous devez parcourir une tranche de votre tuple. Le 1 est le premier élément dont vous avez besoin et 3 (en fait 2 + 1) est le premier élément dont vous n'avez pas besoin.

Les éléments d'une liste sont numérotés de 0:

listOfStuff =([a,b], [c,d], [e,f], [f,g])
               0      1      2      3

[1:3] prend les éléments 1 et 2.

37
eumiro

Une manière plus efficace en mémoire d'itérer sur une tranche d'une liste serait d'utiliser islice() depuis le module itertools:

from itertools import islice

listOfStuff = (['a','b'], ['c','d'], ['e','f'], ['g','h'])

for item in islice(listOfStuff, 1, 3):
    print item

# ['c', 'd']
# ['e', 'f']

Cependant, cela peut être relativement inefficace en termes de performances si la valeur de début de la plage est une grande valeur car islicedevrait itérer sur les premiers éléments de valeur de démarrage-1 avant de renvoyer des éléments.

8
martineau

Vous souhaitez utiliser le découpage.

for item in listOfStuff[1:3]:
    print item
4
Håvard

En utilisant iter builtin:

l = [1, 2, 3]
# i is the first item.
i = iter(l)
next(i)
for d in i:
    print(d)
3
Elior Malul