为什么itertools.combinations输出带多余逗号,如何避免该问题?
问题解答
你看到的单元素末尾逗号是Python单元素元组的标准语法标识,不是异常输出。itertools.combinations的返回值固定为元组类型,Python规定必须用(x,)的格式表示单元素元组,以此和普通括号包裹的数值((1)等价于整数1)做区分。
你期望的[(1), (2), (3), (4), ...]格式中,(1)本身不属于元组,仅为带括号的整数,根据你的使用场景可以选两种实现方案:
场景1:需要实际存储的结果对应逻辑
如果接受长度为1的组合存为单个数值,长度为2的组合存为元组,一行实现代码如下:
import itertools result = [x[0] if len(x) == 1 else x for l in range(1, 3) for x in itertools.combinations([1,2,3,4], l)]
运行得到的实际存储结果为:[1, 2, 3, 4, (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
场景2:仅需要打印输出符合指定格式
如果不需要修改实际存储的元组类型,仅需要输出展示的字符串符合你给出的样式,实现代码如下:
import itertools result = [x for l in range(1,3) for x in itertools.combinations([1,2,3,4], l)] print("[" + ", ".join(f"({','.join(map(str, item))})" for item in result) + "]")
打印输出结果为:[(1), (2), (3), (4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
内容的提问来源于stack exchange,提问作者qkfsbxjayiedbe
相关产品推荐
相关产品推荐

