给定一个列表 ["foo", "bar", "baz"]
和列表中的一个项目 "bar"
,我如何获得它的索引 1
?
原文由 Eugene M 发布,翻译遵循 CC BY-SA 4.0 许可协议
大多数答案都解释了如何找到 单个索引,但是如果该项目多次出现在列表中,他们的方法不会返回多个索引。使用 enumerate()
:
for i, j in enumerate(['foo', 'bar', 'baz']):
if j == 'bar':
print(i)
index()
函数仅返回第一次出现,而 enumerate()
返回所有出现。
作为列表理解:
[i for i, j in enumerate(['foo', 'bar', 'baz']) if j == 'bar']
这也是 itertools.count()
的另一个小解决方案(与枚举的方法几乎相同):
from itertools import izip as zip, count # izip for maximum efficiency
[i for i, j in zip(count(), ['foo', 'bar', 'baz']) if j == 'bar']
对于更大的列表,这比使用 enumerate()
更有效:
$ python -m timeit -s "from itertools import izip as zip, count" "[i for i, j in zip(count(), ['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 174 usec per loop
$ python -m timeit "[i for i, j in enumerate(['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 196 usec per loop
原文由 TerryA 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
参考: 数据结构 > 更多关于列表
警告如下
请注意,虽然这可能是回答所 问 问题的最干净的方法,但
index
是list
API 的一个相当弱的组件,我不记得我上次使用的时间它在愤怒中。评论中已向我指出,由于此答案被大量引用,因此应使其更加完整。关于list.index
的一些警告如下。最初可能值得看一下它的文档:”`
如果该项目可能不在列表中,您应该
item in my_list
(干净,可读的方法)检查它,或者index
调用包装在 ---try/except
块中,该块捕获ValueError
(可能更快,至少在要搜索的列表很长并且该项目通常存在时。 )