Как мне сделать «для каждого», начиная с определенного индекса списка (Python)? - PullRequest
1 голос
/ 19 ноября 2009

Предположим, у меня есть этот список:

thelist = ['apple','orange','banana','grapes']
for fruit in thelist:

Это пройдет через все плоды.

Однако, что если я захочу начать с оранжевого? Вместо того, чтобы начинать с яблока? Конечно, я мог бы сделать «если ... продолжить», но должен быть лучший способ?

Ответы [ 6 ]

14 голосов
/ 19 ноября 2009
for fruit in thelist[1:]:
    ...

это, конечно, предполагает, что вы знаете, с какого индекса начинать. но вы можете легко найти индекс:

for fruit in thelist[thelist.index('orange'):]:
    ...
11 голосов
/ 19 ноября 2009

с использованием элегантных питоновских ломтиков

>>> for fruit in thelist[1:]:
>>>    print fruit
3 голосов
/ 19 ноября 2009

Как упомянул Пол Макгуайр, нарезка списка создает копию в памяти результата. Если у вас есть список с 500 000 элементов, то выполнение l[2:] создаст новый список 499 998 элементов.

Чтобы избежать этого, используйте itertools.islice:

>>> thelist = ['a', 'b', 'c']

>>> import itertools

>>> for i in itertools.islice(thelist, 1, None):
...     print i
...
b
c
2 голосов
/ 19 ноября 2009
for fruit in thelist [1:]:

начнется со второго элемента в списке.

1 голос
/ 19 ноября 2009
for fruit in thelist[1:]:
    print fruit
0 голосов
/ 19 ноября 2009

Срезы создают копии списков, поэтому, если имеется много элементов или если вы не хотите отдельно искать в списке начальный индекс, итератор разрешит вам поиск, а затем продолжит с есть:

>>> thelist = ['apple','orange','banana','grapes']
>>> fruit_iter = iter(thelist)
>>> target_value = 'orange'
>>> while fruit_iter.next() != target_value: pass
...
>>> # at this point, fruit_iter points to the entry after target_value
>>> print ','.join(fruit_iter)
banana,grapes
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...