【问题标题】:itertools combinations creates a missing pairitertools 组合创建一个缺失的对
【发布时间】:2016-08-06 16:35:27
【问题描述】:

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

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。

提前致谢

【问题讨论】:

    标签: list python-2.7 hash combinations itertools


    【解决方案1】:

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

    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):
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2019-03-14
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多