列表中的索引元素[重复]

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]

【讨论】:

以上是关于列表中的索引元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java-List接口

对列表中每个元素索引的最大值求和 [关闭]

删除列表元素的几种方法

python如何有多个重复元素删除其中一个?

JAVA-基础-List接口

List接口概述