[英]Python recursive powerset function for tuples
我正在尝试创建一个 function 以元组元组的形式返回一个幂集(给定数字元组的所有子集)。
我遵循了我之前找到的代码,但这会将 output 作为列表列表而不是元组的元组返回。
def subs(S):
if S == []:
return [[]]
x = subs(S[1:])
return x + [[S[0]] + y for y in x]
这正确返回: [[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
的输入subs([1,2,3])
但是我正在寻找 function 来输入一个元组并返回一个元组的元组,这样 output 将是:
>>> print (subs((1,2,3))
((), (3), (2), (2, 3), (1), (1, 3), (1, 2), (1, 2, 3))
任何帮助将不胜感激,谢谢。
这里是 go:
pip install more-itertools
from more_itertools import powerset
print(tuple([x for x in powerset( (1, 2, 3) )]))
Output:
((), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3))
将元组混合在一起或从旧元组制作新元组有点棘手,因为它们是不可变的。 这是一个提示,可能会让您朝着正确的方向前进,以及有关在其他解决方案中建立索引的提示。 在创建新元组时,您可以使用“scatter”运算符将现有元组解压缩成碎片:
In [12]: c = ((2,3),(4,),(99,0,8))
In [13]: d = (*c, (7,6,5))
In [14]: d
Out[14]: ((2, 3), (4,), (99, 0, 8), (7, 6, 5))
列表的 function 可以转换为使用元组。 没有直接等效的列表推导,因为 object 在循环期间需要是可变的,但可以使用tuple()
转换结果。 需要注意 1 元素元组的语法,因此必须在几个地方插入一些额外的逗号。
def subs(S):
if S == ():
return ((),)
x = subs(S[1:])
return x + tuple([(S[0],) + y for y in x])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.