Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有效地将列表中的相同元素分组_Python_Python 3.x_List - Fatal编程技术网

Python 有效地将列表中的相同元素分组

Python 有效地将列表中的相同元素分组,python,python-3.x,list,Python,Python 3.x,List,假设n=5和m=3并输入array=[3,2,1,4,5]所以arr=[0,2,1,1,2]在这种情况下,但现在我想在一个列表中高效地存储相等值的元素,即[1,1]和[2,2]。有效地将它们组合在一起的最佳方式是什么?我还希望它们的索引位于末尾 输出:[[1,1],[2,2]]来自索引(2,3)和索引(1,4) 我要查找的是在执行mod操作后具有相同值的mod之前原始数组元素的索引。set仅保存唯一值 n,m=map(int,input().split()) arr=[i%m for i in

假设
n=5
m=3
并输入
array=[3,2,1,4,5]
所以
arr=[0,2,1,1,2]
在这种情况下,但现在我想在一个列表中高效地存储相等值的元素,即
[1,1]
[2,2]
。有效地将它们组合在一起的最佳方式是什么?我还希望它们的索引位于末尾

输出:[[1,1],[2,2]]来自索引(2,3)和索引(1,4)


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

set
仅保存唯一值

n,m=map(int,input().split())
arr=[i%m for i in (map(int,(input().split())))]
更新(感谢@JonClements)


不,它不能在少于O(N)的时间内完成。您需要对所有元素进行一次迭代以进行分组。那么预期的输出是什么?因此
0
不包括在内,因为它是唯一的?
[1,2,1,1,2]
的输入列表是什么?@Demonking28那么也许你应该问这个问题:)因为有很多方法可以对数据进行分组——但是你的例子有助于回答那些对你的实际目标没有立即那么有用的问题(以及基于想要他们的指数的结果会是什么?)@Demonking28好的-你需要在问题本身中清楚地说明这一点-因为这并不明显,人们不会阅读所有的评论。。。(更不用说——您是否能够使用基于1的索引——因为Python是基于0的——所以您的示例索引不会立即产生太多意义)这本可以使用counter-too-counter(arr)来完成,但不会保留索引。我想我在问题中没有说清楚,但现在我已经编辑了这个问题。很抱歉。与其使用try/except-use
s.setdefault(v,[]).append(i)
,不如全力以赴,不要费心创建
arr
,因为它本身可能没有用处,并且在枚举(数组)中为i,v使用:
s.setdefault(v%3,[]).append(v)
我不知道问题文本中的第一个,错过了第二个。谢谢
arr=[0, 2, 1, 1, 2]
arr = [(s, arr.count(s)) for s in  set(arr)]
#  [(0, 1), (1, 2), (2, 2)]
s = {}
for i, v in enumerate(arr):
  s.setdefault(v % 3, []).append(i)
print(s)
# {0: [0], 1: [2, 3], 2: [1, 4]}