繁体   English   中英

在 Python 中通过动态分配将两个数组合二为一

[英]Combining two arrays into one in Python, by dynamic allocation

我有两个数组, list_stringlist_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_stringlist_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM