在不必要的情况下,如何在不重复的情况下获取嵌套列表中元素的所有排列。
因此,例如,如果我有一个嵌套列表:

[['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/

10-09 13:25