【发布时间】:2018-09-06 14:19:32
【问题描述】:
这个问题之前在这里被问过一个严重的错字:Counting "unique pairs" of numbers into a python dictionary?
这是一个算法问题,我不知道最有效的解决方案。我的想法是以某种方式缓存列表中的值并枚举对......但这会很慢。我猜itertools 有一些有用的东西。
假设我有一个从不重复的整数列表:
list1 = [2, 3]
在这种情况下,有一个唯一的对 2-3 和 3-2,所以字典应该是:
{2:{3: 1}, 3:{2: 1}}
即有1对2-3和1对3-2。
对于较大的列表,配对是相同的,例如
list2 = [2, 3, 4]
有字典
{2:{3:1, 4:1}, 3:{2:1, 4:1}, 4:{3:1, 2:1}}
(1) 一旦列表的大小变得更大,如何使用python数据结构在算法上找到这种格式的“唯一对”?
(2) 我提到列表不能有重复的整数,例如
[2, 2, 3]
是不可能的,因为有两个 2。
但是,可能有一个列表列表:
list3 = [[2, 3], [2, 3, 4]]
字典必须是
{2:{3:2, 4:1}, 3:{2:2, 4:1}, 4:{2:1, 3:1}}
因为有两对 2-3 和 3-2。给定列表中的多个列表,如何“更新”字典?
编辑:我的最终用例是,我想遍历数百个整数列表,并创建一个包含“计数”对的字典。这有意义吗?可能还有另一种更有用的数据结构。
【问题讨论】:
-
字典中不能有重复的键,所以你想要的结果不会发生。
-
@DSM 我明白了;让我编辑
-
字典中的键是唯一的
-
你可能会得到像:
{2:{3: 2, 4: 1}, 3:{2: 2, 4: 1}, 4:{3: 1, 2: 1}}这样更有意义的东西。 -
@DSM 我已经编辑了问题;抱歉,我没有想清楚
标签: python python-3.x dictionary itertools