Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
元组的Python递归powerset函数_Python_List_Recursion_Tuples - Fatal编程技术网

元组的Python递归powerset函数

元组的Python递归powerset函数,python,list,recursion,tuples,Python,List,Recursion,Tuples,我试图创建一个函数,以元组的形式返回给定数字元组的所有子集 def subs(S): if S == []: return [[]] x = subs(S[1:]) return x + [[S[0]] + y for y in x] 我遵循了我以前找到的代码,但这会将输出返回为列表列表,而不是元组的元组 def subs(S): if S == []: return [[]] x = subs(S[1:])

我试图创建一个函数,以元组的形式返回给定数字元组的所有子集

def subs(S):
    if S == []:
        return [[]]

    x = subs(S[1:])

    return x + [[S[0]] + y for y in x]
我遵循了我以前找到的代码,但这会将输出返回为列表列表,而不是元组的元组

def subs(S):
    if S == []:
        return [[]]

    x = subs(S[1:])

    return x + [[S[0]] + y for y in x]
对于subs[1,2,3]的输入,它正确地返回:[[]、[3]、[2]、[2,3]、[1]、[1,2]、[1,2,3]]

但是,我正在寻找输入一个元组并返回一个元组元组的函数,这样输出将是:

>>> print (subs((1,2,3))
((), (3), (2), (2, 3), (1), (1, 3), (1, 2), (1, 2, 3))
感谢您的帮助。

给您:

pip安装更多itertools

从更多itertools导入功率集 printtuple[x代表动力集1、2、3中的x] 输出:

((), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3))

将元组混合在一起或从旧元组生成新元组有点棘手,因为它们是不可变的。这里有一个提示,可以帮助您找到正确的方向,以及关于在另一个解决方案中建立索引的提示。创建新元组时,可以使用“散布”操作符将现有元组解压为多个片段,例如:

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))

列表函数可以转换为使用元组。没有列表理解的直接等价物,因为对象在循环期间需要是可变的,但结果可以使用tuple转换。需要注意1元素元组的语法,因此必须在几个地方插入一些额外的逗号

def subs(S):
    if S == ():
        return ((),)

    x = subs(S[1:])

    return x + tuple([(S[0],) + y for y in x])

我感谢您的帮助,但我不允许使用外部工具或函数,我必须自己编写函数。在这种情况下有什么想法吗?我不想解决这个问题,因为这对我来说似乎是一个家庭作业。也就是说,我会给你一个提示。元组和列表非常接近。您可以对它们两个执行切片。祝你好运,非常感谢!我尝试了一些非常相似的东西,但没有考虑逗号。更有意义now@dontknowwhatimdoing是的,单元素元组的困难在于a只是一个表达式,其计算结果为a,通常使用括号,因此有必要在代码中插入一个额外的逗号,即a,。然而,这只是一个语法问题,一旦创建,它们的行为与任何其他元组一样正常。