【发布时间】:2020-03-22 04:23:17
【问题描述】:
我这样做:
from itertools import chain, combinations, permutations
import itertools
i = [5, 6, 7]
x = list(combinations(i, 2))
x.append((x[1][0],))
x = list(itertools.chain.from_iterable(x))
采取所有可能的排列,但在一个扁平列表中,其中每对相邻元素对应一个排列。
这给出了:
[5, 6, 5, 7, 6, 7, 5]
这里列表中的相邻元素对都是排列:
(5,6), (6,5), (5,7), (7,6), (6,7), (7,5)
而不是经典的带有排列的元组列表:
[(5, 6), (5, 7), (6, 5), (6, 7), (7, 5), (7, 6)]
有没有比我的代码更简洁和/或快速的功能或方式?
【问题讨论】:
-
为什么你的代码输出只有 4 对,而不是经典的 6 对?
-
我不清楚你想要什么。您声明您只需要相邻的元素,但您的代码会找到所有排列。
-
代码生成所有组合,然后添加包含结束元素的反向副本。
-
@QuangHoang,如果你取所有相邻元素对,那么它们是 6 ;) 实际上对应于所有排列。现在更清楚了吗?
-
@Prune,我想要所有排列,但在一个扁平列表中,其中每对相邻元素对应一个排列。
标签: python permutation flatten