itertools 组合创建一个缺失对

itertools combinations creates a missing pair

我使用以下代码从数组列表创建了组合哈希:

all_waypoints = [item1,item2,...]
waypoint_distances = {}
 for (waypoint1, waypoint2) in combinations(all_waypoints, 2):
 waypoint_distances[frozenset([waypoint1, waypoint2])] = distance 

此后我使用以下代码浏览创建的组合列表:

for (waypoint1, waypoint2) in waypoint_distances.keys():

问题是程序在代码中途停止并声明:

ValueError: need more than 1 value to unpack

调试程序后,我发现 waypoint_distances 哈希包含以下元素,而我的程序的其余部分停止了:

...,frozenset(['an-item', 'another-item']), frozenset(['an-item']),...

我唯一能想到的是列表是组合列表是用 itertool 创建未完成的,我该如何解决这个问题?问题出在7050个组合hash附近,组合总量约16k

提前致谢

如果您的项目列表中有一些重复项,可能会发生这种情况:

from itertools import combinations

all_waypoints = [1,2,3,1]
waypoint_distances = {}
for (waypoint1, waypoint2) in combinations(all_waypoints, 2):
    print(set([waypoint1, waypoint2]))

结果:

{1, 2}
{1, 3}
{1}
{2, 3}
{1, 2}
{1, 3}

你必须消除长度为 1

sets
for (waypoint1, waypoint2) in combinations(all_waypoints, 2):
  fs = frozenset([waypoint1, waypoint2])
  if len(fs)==2:
     waypoint_distances[fs] = distance 

或更好:使用 set

在源头消除重复项
for (waypoint1, waypoint2) in combinations(set(all_waypoints), 2):