Spi*_*ike 4 python arrays slice
我想将G[1][0],G[1][1]...G[1][100]和 的值设置G[0][1],G[1][1]...G[100][1]为 1
G = [[0]*101]*101
G[1][:] = 1
G[:][1] = 1
Run Code Online (Sandbox Code Playgroud)
比我得到错误,
...
G[1][:] = 1
TypeError: can only assign an iterable
Run Code Online (Sandbox Code Playgroud)
没有 Numpy 我怎么能做到这一点?
这里有一些缺陷。
首先,您赋值的左侧产生一个可迭代对象,因此您不能为其分配标量。相反,右侧(在您的情况下1)需要是等长的可迭代对象,例如:
G[0][:] = [0] * 101 # Warning: Copied code from question, still flawed
Run Code Online (Sandbox Code Playgroud)
您在线初始化您的列表。这对于文字列表是可以的,但对于第二维会失败,因为它将保存对同一内部列表的101 个引用。更改其中的一个元素将对所有其他索引产生影响。
你想像这样初始化你的列表:
G = [[0] * 101 for x in range(102)]
Run Code Online (Sandbox Code Playgroud)
接下来的事情是,[:]-call 创建了您列表的硬拷贝。所以这里发生的是:
G[0][:] 获取 2d 列表的第一列并将其硬拷贝。G[:][0] 硬拷贝整个 2d 列表,然后返回其中的第一列。你可能不希望整个列表复制周围所有的时间,失去其参考,并只对副本的变化。
假设您的第一个维度是指列,而您的第二个维度是指行:
将列的所有元素设置为1:
G[0] = [1] * 101
Run Code Online (Sandbox Code Playgroud)
将一行的所有元素设置为1:
for i in range(102): G[i][0] = 1
Run Code Online (Sandbox Code Playgroud)