python - 从列表元素继续
问题描述
我有一个列表,我想从一个特定的列表元素继续,它是一个字符串
例子
a = ['Sam','Julian','Edna','Jack','Tressa']
for name in a['Julian':]:
print(name)
但是这样做会给我一个错误
Traceback (most recent call last):
File "main.py", line 3, in <module>
for name in a['Julian':]:
TypeError: slice indices must be integers or None or have an __index__ method
当我的实际列表包含数千个这样的字符串时,如何解决这个问题以达到相同的结果?
解决方案
这将做到:
for name in a[a.index('Julian'):]:
list.index
返回第一次看到有问题的元素的索引,ValueError
如果没有找到则提升。
另一种适用于任意迭代(并且只需要一次通过)的替代解决方案是用于itertools.dropwhile
删除元素,直到达到所需的元素:
for name in itertools.dropwhile(lambda x: x != 'Julian', a):
这将迭代a
,丢弃所有值,直到一个值等于'Julian'
,然后它将产生所有后续值(无论它们是否等于'Julian'
)。优点是它只需要执行一次数据for name in a[a.index('Julian'):]:
传递,在最坏的情况下大约进行两次传递;部分传递以查找 的第一个实例'Julian'
,其余部分的部分传递以对其list
进行切片,然后进行第三次传递以实际迭代生成的切片。