我有一条按照这个顺序在一条路线(地点序列)上行驶的公共汽车路线: -
Ayr - Newton - Troon - Paisley - Glasgow
即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')]
我想要最终得到的是列表或元组列表(或最快的大多数内存效率序列),它们具有各种可能的组合组合(从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]
不容易!有人可以帮忙吗?
答案 0 :(得分: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')]