我如何生产:
("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',)]
