按条目单独列出

2024-06-16 11:08:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有一个Python列表包含了127项,例如

data = [1, 7, 2, 1, 1, 1, 2, 2, 7, 1, 7, 7, 2]

我现在想得到每个条目的所有索引,即

g1 = [0, 3, 4, 5, 9]
g2 = [2, 6, 7, 12]
g7 = [1, 8, 10, 11]

data数组可能很长,因此效率很重要。我如何做到这一点?你知道吗


Tags: 目的列表data数组效率g1g2g7
3条回答

虽然werkzeug并不适合这份工作,但它会很好地工作:

from werkzeug import MultiDict

data = [1, 7, 2, 1, 1, 1, 2, 2, 7, 1, 7, 7, 2]

g = MultiDict((v, i) for i, v in enumerate(data))
g1 = g.getlist(1)
g2 = g.getlist(2)
g7 = g.getlist(7)

print repr(g7)
# [1, 8, 10, 11]

像这样更有活力的怎么样?你知道吗

data = [1, 7, 2, 1, 1, 1, 2, 2, 7, 1, 7, 7, 2]
index_dict = {}

for i in range(len(data)):

  # Get or create the entry for the value
  sub_dict = index_dict.setdefault(val, [])

  # Add the index for the value
  sub_dict.append(i)

此代码将为遇到的每个值创建一个条目并存储其索引。然后你可以查字典知道每个值的索引。你知道吗

虽然这段代码没有列表理解那么优雅,但它的优点是只遍历数据一次。你知道吗

您可以使用^{}来收集每组元素的索引:

In [1]: from collections import defaultdict

In [2]: data = [1, 7, 2, 1, 1, 1, 2, 2, 7, 1, 7, 7, 2]

In [3]: indices = defaultdict(list)

In [4]: for i, d in enumerate(data):
   ...:     indices[d].append(i)
   ...:     

In [5]: indices
Out[5]: defaultdict(<class 'list'>, {1: [0, 3, 4, 5, 9], 2: [2, 6, 7, 12], 7: [1, 8, 10, 11]})

相关问题 更多 >