1

次の順序でルート (一連の場所) を移動するバス ルートがあります。

Ayr - Newton - Troon - Paisley - Glasgow

すなわちroute = ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow']

旅を分割できるあらゆる可能な方法を見つける必要がありました (常にグラスゴーで終わるエアで始まるため、すべてのペアの組み合わせを見つけて、各 (タプル) ペアをリストに追加するコード (python) があります。

pairs = [('Ayr', 'Newton'),('Ayr', 'Troon'),('Ayr', 'Paisley'),('Ayr', 'Glasgow'),('Newton', 'Troon'),('Newton', 'Paisley'),('Newton', 'Glasgow'),('Troon', 'Paisley'),('Troon', 'Glasgow'),('Paisley', 'Glasgow')]

私が最終的に作りたいのは、リストのリストまたはタプルのリスト (または最速で最もメモリ効率の高いシーケンス) であり、考えられるすべてのペアの組み合わせ (エアで始まり、グラスゴーで終わる) です。

final_splits = [['Ayr', 'Glasgow'], ['Ayr', 'Newton', 'Glasgow'], ['Ayr', 'Newton', 'Troon', 'Glasgow'], ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow'], ['Ayr', 'Troon', 'Glasgow'], ['Ayr', 'Troon', 'Glasgow'], ['Ayr', 'Troon', 'Paisley', 'Glasgow']..........etc]

簡単ではありません!誰でも助けることができますか?

4

1 に答える 1

7

すべての組み合わせがペアで表示されると仮定すると、その中間ステップを計算する必要はありません

>>> from itertools import combinations
>>> route = ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow']
>>> [(route[0],)+x+(route[-1],) for i in range(len(route)-1) for x in combinations(route[1:-1],i)]
[('Ayr', 'Glasgow'), ('Ayr', 'Newton', 'Glasgow'), ('Ayr', 'Troon', 'Glasgow'), ('Ayr', 'Paisley', 'Glasgow'), ('Ayr', 'Newton', 'Troon', 'Glasgow'), ('Ayr', 'Newton', 'Paisley', 'Glasgow'), ('Ayr', 'Troon', 'Paisley', 'Glasgow'), ('Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow')]
于 2012-04-11T00:17:31.663 に答える