[英]Combining two arrays into one in Python, by dynamic allocation
我有两个数组, list_string
和list_string2
。 它们的值是静态分配和填充的(在编辑器中)
list_string = ["1", "12", "15", "21", "131"]
#DEFINING THE ROW AND COLUMN VALUE FOR RESULTANT ARRAY
rows,coln = (5,5)
#INITIALIZING THE RESULTANT ARRAY
arr = [[0]for i in range(rows) for j in range(coln)]
list_string2 = ["1","2","3","4","5"]
#ITERATING THROUGH EACH OF THE LISTS FOR FILLING
for i in range(len(list_string)):
for j in range(len(list_string2)):
arr[i][j] = [list_string[i]] [list_string2[j]])
我做了一些阅读,看到了关于定义、初始化二维数组的其他线程,但它们都创建了新数组并静态分配了值。 我正在尝试动态分配值但错误代码,我得到
回溯(最近一次调用):文件“C:......intro2.py”,第 12 行,在 arr.append([list_string[i]] [list_2[j]]) 类型错误:列表索引必须是整数或切片,而不是 str
使用的索引 i 和 j 绝对是整数,因为它们循环遍历 range 方法。 谁能解释为什么会这样。
编辑2:
预期输出:
[[“1”“1”“12”“15”“21”“131”]
[“2”“1”“12”“15”“21”“131”]
[“3”“1”“12”“15”......“131”]
[“4”“1”......................“131”]
[“5”......................“131”]
代码更改:
我找出了一些越界索引错误,并将代码修改如下,(错误仍然存在)
list_string = ["1", "12", "15", "21", "131"]
#DEFINING THE ROW AND COLUMN VALUE FOR RESULTANT ARRAY
rows,coln = (5,6)
arr = [[0 for i in range(coln)] for j in range(rows)]
print(arr)
list_string2 = ["1","2","3","4","5"]
#ITERATING THROUGH EACH OF THE LISTS FOR FILLING
for i in range(len(list_string)):
for j in range(len(list_string2)):
arr[i][j] = [list_string[i]][list_string2[j]]
print (arr)
回答:
如果我理解正确,您不需要rows, coln
变量,因为循环取决于list_string
和list_string2
的大小
arr = [list_string[:] for _ in range(len(list_string2))]
for i, l in enumerate(arr):
l.insert(0, list_string2[i])
这将产生您预期的输出
>>> print(arr)
[['1', '1', '12', '15', '21', '131'],
['2', '1', '12', '15', '21', '131'],
['3', '1', '12', '15', '21', '131'],
['4', '1', '12', '15', '21', '131'],
['5', '1', '12', '15', '21', '131']]
首先,这里有一个额外的括号
arr[i][j] = [list_string[i]] [list_string2[j]])
^
为了解释错误,它来自here
arr[i][j] = [list_string[i]] [list_string2[j]]
[list_string[i]]
计算出一个包含list_string
元素的新列表。 对于i=0
,这是["1"]
。 对于[list_string2[j]]
它是["1"]
对于j=0
当您在列表后放置方括号时,在语法上就是访问列表的元素。 所以你代码的最后一行相当于下面的
lstr = ["1"] # [list_string[0]]
arr[i][j] = lstr["1"] # [list_string[0]] [list_string2[0]]
您正在尝试访问没有意义的列表的元素"1"
。 这就是您收到TypeError: list indices must be integers or slices, not str
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.