为什么我无法正确地将项目添加到Python列表中?
问题描述:
我只是想将项目添加到列表中,我不能!我的代码:为什么我无法正确地将项目添加到Python列表中?
import numpy as np
data = [[]] * 10
for i in range(0, len(data)):
slice = np.random.randn(100, 100, 3)
print('before: ', np.shape(data))
print('slice: ', np.shape(slice))
data[i].append(slice)
print('after: ', np.shape(data))
结果如下:
before: (10, 0)
slice: (100, 100, 3)
after: (10, 1, 100, 100, 3)
...
before: (10, 0)
slice: (100, 100, 3)
after: (10, 10, 100, 100, 3)
所以,(100,100,3)未在data[0]
插入到正确的位置,但创建额外的尺寸!为什么?我该如何避免它?
结果列表的正确的尺寸应为(10,,100,100,3) - 不(10,10 ,100,100,3)。
答
主要的罪魁祸首是
data = [[]] * 10
从而创建一个空的列表,并复制它更多的9倍,因此,实际上要插入到同一列表的10倍。例如:
In [113]: data = [[]] * 10
In [114]: data[0].append(1)
In [115]: data
Out[115]: [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
您应该
- 创建一个占位符列表,然后插入在第i个元素,或
- 创建一个空列表
[]
并调用.append
但不是两者都有。
我会建议宣布一个空list
:
data = [[] for _ in range(10)]
现在,调用.append
在循环:
data.append(slice)
您可以将结果转换为使用data = np.array(data)
数组。这里有一个例子:
data = [[] for _ in range(10)]
for i in range(0, len(data)):
slice = np.random.randn(100, 100, 3)
data[i].append(slice)
print(np.array(data).shape)
(10, 1, 100, 100, 3)
'数据=名单()'然后'data.append(片)' – Sraw
或'数据[i] = slice' – Sraw
你只需要确保数据只包含10时它被初始化。然后你可以追加。 –