按照一定的模式将列表划分为子列表



给定一个具有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

尽管通过编程不容易做到这一点(不建议使用许多变量(

相关内容

  • 没有找到相关文章

最新更新