from itertools import islice
def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
def all_windows(seq):
for l in xrange(1, len(seq) + 1):
for w in window(seq, l):
yield w
与cpburnz-answer非常相似,它使用嵌套列表理解来实现。
不同的是,生成的列表按长度顺序排序,从大到小。在
但是,如果您只需要生成列表,那么可以考虑使用生成器编写更具可读性的代码:
^{pr2}$与上面的代码相同,但设计为迭代:
这里有一种使用itertools中的
window
配方的方法您可以:
然后,要按降序长度和升序值排序:
^{pr2}$对于弦,它会产生:
相关问题 更多 >
编程相关推荐