我在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])
答案 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)