从特定键开始遍历列表到末尾
在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()
。