在Python中通过动态分配将两个数组合并为一个
我有两个数组,在Python中通过动态分配将两个数组合并为一个,python,arrays,multidimensional-array,Python,Arrays,Multidimensional Array,我有两个数组,list\u string&list\u string2。它们的值是静态指定和填充的(在编辑器中) 我读了一些书,看到了关于定义、初始化2D数组的其他线程,但所有这些线程都创建了新数组并静态地赋值。我正在尝试动态分配值,但是 我得到了错误代码 回溯(最近一次调用上次):文件 “C:……简介2.py”,第12行 arr.append([list_string[i]][list_2[j]])类型错误:列表索引必须是整数或片,而不是str 使用的索引i&j肯定是整数,因为它们通过rang
list\u string
&list\u string2
。它们的值是静态指定和填充的(在编辑器中)
我读了一些书,看到了关于定义、初始化2D数组的其他线程,但所有这些线程都创建了新数组并静态地赋值。我正在尝试动态分配值,但是
我得到了错误代码
回溯(最近一次调用上次):文件
“C:……简介2.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”]
代码更改:
我发现了一些越界索引错误,并对代码进行了如下修改(错误仍然存在)
回答: 如果我理解正确,您不需要
行、coln
变量,因为循环取决于list\u string
和list\u 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]])
^
为了解释这个错误,它来自这里
arr[i][j] = [list_string[i]] [list_string2[j]]
[list\u string[i]
计算为一个新列表,其中包含list\u string
中的元素。对于i=0
,这是[“1”]
。对于[list\u string2[j]
而言,它是[“1”
对于j=0
当你把方括号放在一个列表后面时,语法上就是访问列表中的一个元素
lstr = ["1"] # [list_string[0]]
arr[i][j] = lstr["1"] # [list_string[0]] [list_string2[0]]
您试图访问列表中没有意义的元素
“1”
。这就是您得到类型错误的原因:列表索引必须是整数或切片,而不是str
arr[i][j]=[list_string[i]]][list_string2[j]]
看起来不正确。您缺少的(
括号和其他内容。如2d矩阵=[[“0”“1”“12”“131”“131”“][1”“1”“12”“131”“][1”“][1”“][1”“][12”“][1”“][1”“][1”“][1”“][1”“][1”“1”“12”“13”“][/code>@RoadRunner”“应该在哪里?”。将arr的第0个索引,即arr[0][0]分配给[list_string[0]][list_string 2[0]]方括号被放置,所以可以从这些索引中获取值,并且可以被分配给ARR,它将在循环中的一个点上具有相同的索引。如果一个字符串值被分配给ARR,那么它不应该把ARR看作字符串的一个列表吗?这就是这里的错误。你的预期结果不清楚。更新问题。对于预期的输出,我将尝试给您一个更好的解释。我做了一些更改,在编辑中进行了解释,我希望现在它更清晰。感谢您的列表中没有0
\u string2
,无论编辑的第一行是什么
arr[i][j] = [list_string[i]] [list_string2[j]]
lstr = ["1"] # [list_string[0]]
arr[i][j] = lstr["1"] # [list_string[0]] [list_string2[0]]