【问题标题】: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() 只获取第一次出现的索引。您想要每个项目的所有索引吗?

标签: python python-2.7


【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多