给定一个长度为 N
的数组 a
,它是一个整数列表,我想提取重复值,其中每个值都有一个单独的列表,其中包含重复项的位置。在伪数学中:
If |M| > 1:
val -> M = { i | a[i] == val }
示例(N=11
):
a = [0, 3, 1, 6, 8, 1, 3, 3, 2, 10, 10]
应该给出以下列表:
3 -> [1, 6, 7]
1 -> [2, 5]
10 -> [9, 10]
我添加了 python
标签,因为我目前正在使用该语言编程(numpy 和 scipy 可用),但我更感兴趣的是如何实现它的通用算法。不过,代码示例很好。
一个想法,我还没有具体化:构造一个元组列表,将 a
的每个条目与其索引配对:(i, a[i])
。以第二个条目为键对列表进行排序,然后检查第二个条目相同的连续条目。
最佳答案
这是一个使用 python 字典的实现(为了方便,实际上是一个 defaultdict)
a = [0, 3, 1, 6, 8, 1, 3, 3, 2, 10, 10]
from collections import defaultdict
d = defaultdict(list)
for k, item in enumerate(a):
d[item].append(k)
finalD = {key : value for key, value in d.items() if len(value) > 1} # Filter dict for items that only occurred once.
print(finalD)
# {1: [2, 5], 10: [9, 10], 3: [1, 6, 7]}
关于python - 从数组中提取重复值和位置的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18339228/