Skip to main content
 首页 » 编程设计

python之元组的子集

2025年05月04日14soundcode

我如何生产:

("A","b"),("b","C"),("A",),("b",),("C",) 

来自

("A","b","C") 

也许可以使用 itertool,但我似乎找不到合适的函数。

更新

请注意,("A","C") 不在预期输出中,因为我希望子集包含彼此连续的成员。

另一个例子:

subset(("A","b","C","D")) 

应该产生:

("A","b","C"), 
("b","C","D"), 
("A","b"), 
("b","C"), 
("C","D"), 
("A",), 
("b",), 
("C",), 
("D",) 

请您参考如下方法:

您可以使用滚动窗口方法:

def window(seq, n=2): 
    """ 
    Returns a sliding window (of width n) over data from the sequence 
    s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... 
    """ 
    for i in range(len(seq)-n+1): 
        yield tuple(seq[i:i+n]) 
 
def shrinking_window(seq): 
    for i in range(len(seq)-1, 0, -1): 
        yield from window(seq, i) 
 
print(list(shrinking_window('AbC'))) 
# [('A', 'b'), ('b', 'C'), ('A',), ('b',), ('C',)] 
print(list(shrinking_window('AbCD'))) 
# [('A', 'b', 'C'), ('b', 'C', 'D'), ('A', 'b'), ('b', 'C'), ('C', 'D'), ('A',), ('b',), ('C',), ('D',)]