python - 从数组中提取重复值和位置的列表

标签 python algorithm sorting duplicates

给定一个长度为 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/

相关文章:

python - 使用 NDK 在 Android 上从 C++ 运行 Python

java - 不使用数组从1到N的数列排列方法,java

javascript - 将 JS 数组转换为对象

algorithm - 快速排序的内存复杂度

ios - 查找给定数据集的局部最大值点

php - 如何从数据库中获取结果并在表格中显示排序

sorting - 由于编码问题,排序对象无法正确排序

python - Django 上下文不渲染

python - Sqlalchemy 与联合继承和 Firebird 一起存在

python - GAE 模拟器如何限制可用 Python 模块的列表?