我有一条公交路线按以下顺序(地点序列)行驶:-
Ayr - Newton - Troon - Paisley - Glasgow
即 route = ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow']
我需要找到所有可能的方式来拆分旅程(总是从 Ayr 开始到 Glasgow 结束,所以我有代码 (python) 可以找到每对组合并将每对(元组)附加到列表中。
pairs = [('Ayr', 'Newton'),('Ayr', 'Troon'),('Ayr', 'Paisley'),('Ayr', 'Glasgow'),('Newton', 'Troon'),('Newton', 'Paisley'),('Newton', 'Glasgow'),('Troon', 'Paisley'),('Troon', 'Glasgow'),('Paisley', 'Glasgow')]
我想要结束的是一个列表列表或元组列表(或最快的最有效内存序列),其中包含所有可能的对组合(从 Ayr 开始到 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]
不容易啊!谁能帮忙?
请您参考如下方法:
假设每个组合都会成对出现,则无需计算中间步骤
>>> 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')]
