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