python表示,将100个值的长列表拆分为一个包含10个值的小数组的列表

2024-04-25 03:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个100个值的列表,我想拆分成一个列表,其中包含数组,每个数组包含10个值。你知道吗

我所拥有的,例如:

array = [1,2,3,4,5,6,7,7,8,9,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8............]

我想要的,比如:

newarray = [[0,1,2,3,4,5,6,7,7,8,9],[1,2,3,4,5,6,7,8,9,1],[2,3,4,5,6,7,8............]]

我想这样做,以便调用newArray[4]并得到10个值。你知道吗

这就是我尝试过的:

for i in range(len(values)):
    a = []
    for j in range(10): 
        a.append(values[j])
    val.append(a)

    print(val)

问题是我现在得到了每个不同数组中的前十个值。你知道吗

我做错什么了?你知道吗


Tags: in列表forlenrangeval数组array
3条回答

之所以只得到前十个值,是因为只对前十个值进行迭代,只进行len(values)迭代。因此,不是以10个子列表结束,每个子列表都有10个值,而是得到一个包含100个子列表的列表,每个子列表都有原始列表的前10个值。要解决这个问题,需要将外部循环变量更改为range(0, len(values) - 10, 10),内部变量更改为range(i, i + 10)。当然,最后会留下一小块你必须处理的东西,但在你的情况下len(values) % 10 == 0你应该没事。综上所述,我们有:

val = []
for i in range(0, len(values) - 10, 10):
    val.append(values[i: i + 10])

通过列表理解:

val = [ values[i : i + 10] for i in range(0, len(values) - 10, 10) ]

当然,还有其他(可以说是更具python风格的)方法来解决这个问题,但下面是您的代码的问题:

在本部分中:

...
    for j in range(10): 
        a.append(values[j])
...

索引j对于i的每个值都是相同的。要追加的值应基于i进行偏移。你知道吗

这里有一种方法:

...
    for j in range(10): 
        a.append(values[(i*10)+j])
...

这样,当i = 0时,您将附加从values[0]values[9]的项。同样,当i=1时,您将附加从values[10]values[19]的项,依此类推。你知道吗

尝试使用列表理解:

[array[i:i+10] for i in range(0, len(array)-9, 10)]

相关问题 更多 >