python - 为什么 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)]
解决方案
这是因为如果没有逗号,单值元组就不能是元组:
>>> (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)]
推荐阅读
- arrays - 创建和操作数组数组
- python-3.x - 是否可以将 sklearn 估计器放在 sklearn.compose.ColumnTransformer 中?
- mongodb - 同一文档中和文档之间的 Concat 数组
- shopify - 无论如何要显示在shopify中提交联系表的用户?
- barcode - 如何使用带有校验位的 ZPL 创建 GS1-128 条码
- python - SQLAlchemy:为具有复合主键的单个表中的所有 id 选择最近的行
- python - 生成包含 3 个字典的所有组合的字典列表
- r - 如何将英里区域添加到 R 密度图?
- python - 我的程序运行时间过长时遇到问题。我不确定它是无限运行还是真的很慢
- c - C:如果我理解 0 和 '\0' 相同,那么当我编写 int my_array = {0}; 时,编译器如何知道数组的大小?