有效地对列表中的相同元素进行分组

时间:2017-12-30 11:04:53

标签: python python-3.x list

n,m=map(int,input().split())
arr=[i%m for i in (map(int,(input().split())))]
在这种情况下,

假设n=5m =3并输入array =[3, 2 ,1 ,4, 5] arr=[0, 2, 1, 1, 2],但现在我想在列表中有效地存储等值的元素,即{{1}和[1,1]。有效地将它们组合在一起的最佳方法是什么?我也希望它们的索引在最后这样

输出:[[1,1],[2,2]]来自指数(2,3)和指数(1,4)

我正在寻找的是在执行mod操作之后采用具有相同值的mod之前的原始数组元素的索引。

1 个答案:

答案 0 :(得分:3)

set仅保存唯一值

arr=[0, 2, 1, 1, 2]
arr = [(s, arr.count(s)) for s in  set(arr)]
#  [(0, 1), (1, 2), (2, 2)]

更新(感谢@JonClements)

s = {}
for i, v in enumerate(arr):
  s.setdefault(v % 3, []).append(i)
print(s)
# {0: [0], 1: [2, 3], 2: [1, 4]}