在不必要的情况下,如何在不重复的情况下获取嵌套列表中元素的所有排列。
因此,例如,如果我有一个嵌套列表:
[['a1','a2','a3'], ['b1', 'b2'], ['c1', 'c2', 'c3', 'c4']]
我想得到:
['a1', 'b1', 'c1']
['a2', 'b2', 'c2']
['a3', 'b1', 'c3']
['a1', 'b2', 'c4']
最佳答案
您可以使用zip()
和itertools.cycle()
:
from itertools import cycle
src = [['a1','a2','a3'], ['b1', 'b2'], ['c1', 'c2', 'c3', 'c4']]
res = list(zip(*map(lambda x, m=max(src): cycle(x) if x != m else x, src)))
使用
max()
,我们找到具有最大长度的元素,并为列表中除该元素之外的所有元素(具有最大长度)apply cycle()
。然后我们将unpack结果转换为zip()
并得到您所需要的。如果要以问题的确切格式打印结果,请使用以下代码:
print(*map(list, zip(*map(lambda x, m=max(src): cycle(x) if x != m else x, src))), sep="\n")
关于python - 不必要时无需重复就可以进行排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58376112/