首页 > 解决方案 > 从列表元素继续

问题描述

我有一个列表,我想从一个特定的列表元素继续,它是一个字符串

例子

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

当我的实际列表包含数千个这样的字符串时,如何解决这个问题以达到相同的结果?

标签: python

解决方案


这将做到:

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进行切片,然后进行第三次传递以实际迭代生成的切片。


推荐阅读