2

编写列表推导以生成以下列表模式:

[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
a= [2,3,4,5]
pattern = [ ]
l = [ ] 
[pattern.append(i+j) for i in a for j in range(0,4)]
print(pattern)

使用此代码,我可以只打印输出而不将它们放入所需的模式。有人可以帮我吗?

4

3 回答 3

2

你可以这样做:

a = [2, 3, 4, 5]
pattern = [[ai + j for ai in a] for j in range(0, 4)]
print(pattern)

输出

[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
于 2020-11-24T08:46:50.347 回答
1

您可以将 arange转换为每个元素的列表a

>>> a = [2, 3, 4, 5]
>>> sub_list_size = 4
>>> pattern = [list(range(x, x + sub_list_size)) for x in a]
>>> pattern
[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
于 2020-11-24T08:31:07.857 回答
0

您可以使用 itertools 执行滚动窗口操作。

from itertools import islice, tee

l = [i for i in range(2,10)]
#[2, 3, 4, 5, 6, 7, 8, 9]

def sliding_window(iterable, size):
    iterables = tee(iter(iterable), size)
    window = zip(*(islice(t, n, None) for n,t in enumerate(iterables)))
    yield from window
    
[i for i in sliding_window(l,4)]
[(2, 3, 4, 5), (3, 4, 5, 6), (4, 5, 6, 7), (5, 6, 7, 8), (6, 7, 8, 9)]
于 2020-11-24T09:05:00.673 回答