簡體   English   中英

Python 遞歸冪集 function 用於元組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM