仅生成数字列表的连续组合

时间:2018-11-07 08:55:35

标签: python python-3.x python-2.7 itertools

我在python [1、2、3、4、5、6]中有一个列表。我想生成长度为2、3、4和5的所有可能组合。我使用了itertools.combinations来生成组合,但它不仅生成连续组合。例如,长度2的组合应仅为[1、2],[2、3],[3、4],[4、5],[5、6]。有没有比以下代码更快的生成方式了?

for start, end in combinations(range(len(lst)), 2):
    if end - start <= 4 and end-start >= 1:
        print(lst[start:end+1])

3 个答案:

答案 0 :(得分:3)

您根本不需要combinations。您想要的内容更像是sliding window

for i in range(2, 6):
    for j in range(len(lst) - i + 1):
        print(lst[j:j + i])

答案 1 :(得分:1)

您可以按以下方式遍历列表:

a = [1,2,3,4,5,6]
for i in range(2, len(a)):
    for j in range(len(a)-i + 1):
        print(a[j:j+i])
    print()

这里的窍门是a[j:j+i]从j返回列表,直到j + i。

将其放入函数形式:

def continuous(lst, length):
     slices = []
     for j in range(len(lst)-length + 1):
         slices.append(a[j:j+length])
     return slices

答案 2 :(得分:1)

您可以通过以下方法遍历列表

lst = [1, 2, 3, 4, 5 ,6]

def continuous(lst, length):
    result = []
    for i in range (0, len(lst)-length):
        entry = []
        for j in range (0, length):
            entry.append(lst[i+j])
        result.append(entry)
    return result

print(continuous(lst, 2))

或者如果您只是想逐行打印

def continuous(lst, length):
    for i in range (0, len(lst)-length):
        entry = []
        for j in range (0, length):
            entry.append(lst[i+j])
        print(entry)