给定一个具有n=16个元素的示例列表a = [311, 7426, 3539, 2077, 13, 558, 288, 176, 6, 196, 91, 54, 5, 202, 116, 95]
(它通常是偶数个元素的列表(。
我希望创建n/4列表,它将是:
list1 = [311, 13, 6, 5]
list2 = [7426, 558, 196, 202]
list3 = [3539, 288, 91, 116]
list4 = [2077, 176, 54, 95]
(解决方案不是在for循环中每个n
取一个元素,例如a[i::3]
,因为随着滑动窗口向左移动,值被排除在外(
谢谢你的提示!
更新:
感谢您为这个特定示例提供的解决方案。然而,我意识到我的问题比这更复杂。
在列表a
是动态生成的意义上,在列表可以减少或增加的意义上。现在我的问题是,假设另一组的列表增长,即直到20个元素。现在,使用相同的概念,输出列表应该是5。示例:
a = [311, 7426, 3539, 2077, 1 ,13, 558, 288, 176, 1, 6, 196, 91, 54, 1, 5, 202, 116, 95, 1]
现在的输出应该是:
list1 = [311, 13, 6, 5]
list2 = [7426, 558, 196, 202]
list3 = [3539, 288, 91, 116]
list4 = [2077, 176, 54, 95]
list5 = [1, 1, 1, 1]
对于列表的大小,依此类推。
再次感谢!
我假设列表a的长度是4的倍数。你可以用numpy来解决你的问题。
import numpy as np
a = [...]
desired_shape = (-1, len(a)//4)
arr = np.array(a).reshape(desired_shape).transpose().tolist()
输出:
[[311, 13, 6, 5],
[7426, 558, 196, 202],
[3539, 288, 91, 116],
[2077, 176, 54, 95],
[1, 1, 1, 1]]
将列表解压缩为变量,或者根据需要对它们进行迭代。
请参阅numpy.transpose和整形以了解它们的用法。
分成4个项目的n/4块
out = [[a[i+4*j] for j in range(4)]
for i in range(len(a)//4)]
输出:
[[311, 1, 176, 91],
[7426, 13, 1, 54],
[3539, 558, 6, 1],
[2077, 288, 196, 5],
[1, 176, 91, 202]]
分成n/4个项目的4块
out = [[a[i+4*j] for j in range(len(a)//4)]
for i in range(4)]
输出:
[[311, 1, 176, 91, 202],
[7426, 13, 1, 54, 116],
[3539, 558, 6, 1, 95],
[2077, 288, 196, 5, 1]]
在列表中拆分:
list1, list2, list3, list4 = out
尽管通过编程不容易做到这一点(不建议使用许多变量(