簡體   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