2016-08-06 9 views
1

不足しているペアを作成します。itertoolsの組み合わせは、私は次のコードを使用して配列リストから組み合わせのハッシュを作成し

その後、私はこのコードで作成された組み合わせリストを通過
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, 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): 
+0

とソースで重複を排除します!ありがとう:) – holahola

関連する問題