2016-08-06 61 views
1

ich eine Kombination Hash aus einer Array-Liste erstellt mit dem folgenden Code:itertools Kombinationen schaffen ein fehlendes Paar

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

danach gehe ich durch die erstellte Kombinationsliste mit diesem Code:

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

die Problem ist, dass auf halbem Weg der Code das Programm anhält und feststellt:

ValueError: need more than 1 value to unpack 

nachdem das Programm Debuggen fand ich, dass die waypoint_distances Hash die folgenden Elemente, wenn der Rest meines Programms enthält hält:

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

Das einzige, was ich ist denken kann, dass die Liste Liste Kombination mit dem itertool unvollendeten erstellt wird, wie kann ich das umgehen? Das Problem liegt um den 7050 Kombinations-Hash, die Gesamtanzahl der Kombinationen beträgt etwa 16k.

Vielen Dank im Voraus

Antwort

1

Wenn es einige Duplikate in Ihrer Artikelliste sind, kann dies vorkommen:

from itertools import combinations 

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

Ergebnis:

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

Sie haben zu beseitigen sets mit length = 1

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

oder besser: beseitigen Duplikate an der Quelle mit einem set

for (waypoint1, waypoint2) in combinations(set(all_waypoints), 2): 
+0

Sie sind genial, die es gemacht haben !! Vielen Dank :) – holahola