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):
我使用以下代码从数组列表创建了组合哈希:
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):