【发布时间】:2017-08-16 12:30:11
【问题描述】:
我知道很多帖子都有类似的问题,并且都看过。但是,我无法做我需要做的事情。
我有一个列表说l1=[0,1,2,3,4],我想将它分成如下的一对元组:
[(0, 1), (2, 3), 4],
[(0, 1), (2, 4), 3],
[(0, 1), (3, 4), 2],
[(0, 2), (1, 3), 4],
[(0, 2), (1, 4), 5],
[(0, 2), (3, 4), 1],
[(0, 3), (1, 2), 4],
[(0, 3), (2, 4), 1],
[(0, 3), (1, 4), 2],
[(0, 4), (1, 2), 3],
[(0, 4), (1, 3), 2],
[(0, 4), (2, 3), 1]
我尝试了how-to-split-a-list-into-pairs-in-all-possible-ways帖子中的解决方案。
def all_pairs(lst):
if len(lst) < 2:
yield lst
return
a = lst[0]
for i in range(1,len(lst)):
pair = (a,lst[i])
for rest in all_pairs(lst[1:i]+lst[i+1:]):
yield [pair] + rest
我得到以下输出:
[(0, 1), (2, 3), 4]
[(0, 1), (2, 4), 3]
[(0, 2), (1, 3), 4]
[(0, 2), (1, 4), 3]
[(0, 3), (1, 2), 4]
[(0, 3), (1, 4), 2]
[(0, 4), (1, 2), 3]
[(0, 4), (1, 3), 2]
我发现我想要的列表中缺少一些组合。
如果有任何建议,我将不胜感激?
【问题讨论】:
-
请问这种小众编程问题的用例是什么?
-
您的第一个列表完整符合您的期望吗?对中的顺序是否无关紧要,对的顺序也是如此吗?目前,这两个答案都产生了更长的答案。
-
其实为什么0从不出现在最后?您是否还应该拥有
[(1, 2), (3, 4), 0]、[(1, 3), (2, 4), 0]等? -
是的,@NickT 是对的。我还应该有他提到的其他组合。
-
你的输入总是有 5 个值吗?如果您希望采用可变长度,有时是奇数,有时是偶数,如果您允许奇数显示为
(4, None)或(4,)而不是裸露的4,可能会更容易。
标签: python list partitioning