找到元组对的所有可能组合,将每个组合成新的序列

Han*_*ver 1 python combinations tuples list python-2.7

我有一条公共汽车路线,按照这个顺序在一条路线(一系列地方)上行驶:

Ayr - Newton - Troon - Paisley - Glasgow
Run Code Online (Sandbox Code Playgroud)

route = ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow']

我需要找到你可以分解旅程的所有可能方式(总是从Ayr结束在格拉斯哥开始,所以我有代码(python)找到每对组合并将每个(元组)对附加到列表中.

pairs = [('Ayr', 'Newton'),('Ayr', 'Troon'),('Ayr', 'Paisley'),('Ayr', 'Glasgow'),('Newton', 'Troon'),('Newton', 'Paisley'),('Newton', 'Glasgow'),('Troon', 'Paisley'),('Troon', 'Glasgow'),('Paisley', 'Glasgow')]
Run Code Online (Sandbox Code Playgroud)

我想要最终得到的是列表或元组列表(或最快的大多数内存有效序列),它们具有各种可能的组合组合(从Ayr开始到格拉斯哥结束).

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]
Run Code Online (Sandbox Code Playgroud)

不容易!有人可以帮忙吗?

Joh*_*ooy 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')]
Run Code Online (Sandbox Code Playgroud)