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

时间:2012-04-11 00:09:06

标签: python list tuples python-2.7 combinations

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

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]

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

1 个答案:

答案 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')]