从特定键开始遍历列表到末尾

17 投票
4 回答
23868 浏览
提问于 2025-04-16 19:15

在Python中,如何从某个特定的位置开始遍历一个列表,而不是从头开始呢?

举个例子:

l = ['a','b','c','d']

假设你有一个列表l,你想从位置b开始遍历,比如说从l[1]这个位置开始。

4 个回答

4

这段代码会从1开始,循环遍历列表l中的每一个项目:

for i in l[1:]:
    #do something with i
5

我来分享一下我的看法:

start_from = 'b'

for val in l[l.index(start_from ) if start_from  in l else 0:]:
   print val
38

简单的答案

只需使用 切片

>>> l = ['a','b','c','d']
>>> for i in l[1:]:
...     print(i)
... 
b
c
d

这样会生成一个新列表,里面会去掉在 1 之前的所有项:

>>> l[1:]
['b', 'c', 'd']

更高效的替代方案

另外,如果你的列表非常大,或者你需要多次切片,可以使用 itertools.islice()。这个方法返回一个迭代器,不会复制整个列表,从而节省内存:

>>> import itertools
>>> s = itertools.islice(l, 1, None)
>>> for i in s:
...     print(i)
... 
b
c
d

还要注意,由于它返回的是一个迭代器,你只能遍历一次:

>>> import itertools
>>> s = itertools.islice(l, 1, None)
>>> for i in s:
...     print(i)
... 
b
c
d
>>> for i in s:
...     print(i)
>>>

如何选择

我觉得切片的写法更清晰、更容易阅读,但 itertools.islice() 可能更高效。大多数情况下我会使用切片,当我的列表有成千上万的项,或者我需要遍历数百个不同的切片时,我会依赖 itertools.islice()

撰写回答