[英]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.