首页 > 解决方案 > 为什么 itertools.combinations 会在输出中添加额外的逗号以及如何避免它?

问题描述

我希望列表中所有可能的长度组合最多为 2 个。我想要它作为单行,我知道如何在更多行中做到这一点。当我尝试这个时:

mylist=[1, 2, 3, 4]
[x for l in range(1,3) for x in itertools.combinations(mylist, l)]

我得到这个结果,逗号附加到长度 1 的组合。

[(1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

我不太明白它们是从哪里来的。当然,我可以删除它们,但这对我来说似乎不对,我确信必须有另一种方法来生成此列表而无需额外的逗号。这就是我要的:

[(1), (2), (3), (4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

标签: pythoncombinationsitertools

解决方案


这是因为如果没有逗号,单值元组就不能是元组:

>>> (1,)
(1,)
>>> (1)
1
>>> 

所以你想要的是不可能的。

但是您可以将单个值元组转换为整数,如下所示:

print([x if len(x) > 1 else x[0] for l in range(1,3) for x in itertools.combinations(mylist, l)])

输出:

[1, 2, 3, 4, (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

推荐阅读