2016-08-06 2 views
1

누락 쌍을 작성itertools 조합 I는 다음과 같은 코드를 사용하여 배열 목록에서 조합 해시를 생성

후,이 코드로 만들어진 조합 목록 통과
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(): 

을 문제는 코드의 절반 정도가 프로그램이 멈추고 상태가 다음과 같이 표시된다는 것입니다.

목록은 조합 목록이 itertool에 완료되지 않은 생성되는 것을 내가 생각할 수있는

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

있는 유일한 방법은 다음과 같습니다 프로그램을 디버깅 후 나는 내 프로그램의 나머지 부분이 정지 할 때 waypoint_distances 해시는 다음과 같은 요소를 포함 발견 어떻게이 주변에 갈 수 있습니까 ?? 문제는 7050 조합 해시에서 발견됩니다. 조합의 총량은 약 16k입니다. 당신의 품목 목록에 일부 중복이있는 경우 미리

에서

감사

답변

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 sets을 제거해야
{1, 2} 
{1, 3} 
{1} 
{2, 3} 
{1, 2} 
{1, 3} 

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

와 소스에서 중복을 제거! 감사 :) – holahola