列表中的索引元素[重复]
Posted
技术标签:
【中文标题】列表中的索引元素[重复]【英文标题】:Indexing elements in a list [duplicate] 【发布时间】:2018-07-06 11:43:06 【问题描述】:我想获取列表中每个元素的索引a=[2,4,5,2]
当我输入 a.index(2)
时,我得到 0 作为输出。如何在 Python 中像这样获取第四个元素的索引?
【问题讨论】:
a.index(2)
返回a
中第一个2
的索引。您的意思是要访问元素4
(不同于第四个元素)吗?那就是a[1]
(python 索引从 0 开始)。也可以试试[(i, x) in enumerate(a)]
。
嗯,有两个二,所以它得到第一个
index()
只获取第一次出现的索引。您想要每个项目的所有索引吗?
【参考方案1】:
你可以试试这个来得到它们:
[print i for i,v in enumerate(a) if v==2] # or any number
【讨论】:
你为什么要调用 print(加上这是一个 Python2 问题)? 好点。我会改变它。但是,在 Python 2 中,使用括号仍然有效。它只是像表达式一样简化它【参考方案2】:您还可以将每个项目的索引存储在 collections.defaultdict()
中:
from collections import defaultdict
a=[2,4,5,2]
indexes = defaultdict(list)
for i, e in enumerate(a):
indexes[e].append(i)
print(indexes)
这给出了:
defaultdict(<class 'list'>, 2: [0, 3], 4: [1], 5: [2])
然后您可以像这样访问每个项目的索引:
>>> indexes[2]
[0, 3]
>>> for i in indexes[2]:
... print(i, '-->', a[i])
...
0 --> 2
3 --> 2
或者正如@Idlehands 在 cmets 中指出的那样,您可以在这里使用dict.setdefault()
:
indexes =
for i, e in enumerate(a):
indexes.setdefault(e, []).append(i)
print(indexes)
这也给出了:
2: [0, 3], 4: [1], 5: [2]
【讨论】:
您也可以使用built-in dict
执行此操作。 indexes.setdefault(e, list()).append(i)
也一样。
@Idlehands 是的,这同样适用。更高效:indexes.setdefault(e, []).append(i)
。我相信使用[]
的成本低于list()
,不过我可能弄错了。【参考方案3】:
你可以像这样恢复所有索引
indices = [i for i in xrange(len(a)) if a[i] == 2]
【讨论】:
以上是关于列表中的索引元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章