2009-02-06 7 views

Répondre

22
for x in thousand[400:500]: 
    pass 

Si vous travaillez avec un itérables au lieu d'une liste, vous devez utiliser itertools:

import itertools 
for x in itertools.islice(thousand, 400, 500): 
    pass 

Si vous devez boucle sur thousand[500], puis utilisez 501 comme ce dernier indice. Cela fonctionnera même si thousand[501] n'est pas un index valide.

+1

Il est à noter que 'alist [istart: iend]' crée une liste complètement nouvelle avec une copie superficielle de tous les éléments de 'alist' entre les indices' istart' et 'iend'. C'est une opération O (iend-istart). – jfs

7
for element in allElements[400:501]: 
    # do something 

Ce sont slices et génèrent une sous-liste de la liste entière. Ils sont l'un des principaux éléments de Python.

+0

Merci. Donc, cela inclura à la fois les 400ème et 500ème éléments? –

+0

Seulement si la borne supérieure est 501. –

2

En utilisant

for element in allElements[400:501]: 
    doSomething(element) 

fait Python créer un nouvel objet, et pourrait avoir un impact sur l'utilisation de la mémoire.

Au lieu de cela j'utiliser:

for index in xrange(400, 501): 
    doSomething(allElements[index]) 

De cette façon, vous permet également de manipuler les index de la liste lors de l'itération.

EDIT: vous pouvez en Python 3.0 utiliser range() au lieu de xrange(), mais 2.5 et les versions antérieures range() crée une liste alors que xrange() crée un générateur, qui mange moins de votre RAM précieux.

Questions connexes