獲取列表中索引時報錯:‘ValueError: shape mismatch: objects cannot be broadcast to a single shape‘

最近在改代碼的時候遇到一個坑,報錯如題目所示
“ValueError: shape mismatch: objects cannot be broadcast to a single shape”。
報錯的代碼段比較長,在原代碼段中報錯的部分是因爲我把兩種數據類型的數據(numpy形式的數組和列表list)存到了一個新的列表中,我在後面需要用到兩個數據在列表裏的index索引值,當我直接去獲取時出現錯誤,這裏只針對報錯的問題寫了一個簡單的代碼段:

import numpy as np

a = [0, 1, 2]
a = np.array(a)
b = [0, 2, 3]
c = [a, b]
for i in c:
    print(c.index(i))

當執行的時候,就會報錯“ValueError: shape mismatch: objects cannot be broadcast to a single shape”。大意是數據的形狀不匹配,在百度的時候發現類似的錯誤信息大都出自數據的維度不匹配,與我遇到的情況不同。
其實從代碼段中可以看到a和b是分別屬於list和numpy形式的array兩種不同的類型。當然,列表是可以同時存儲不同數據類型的元素的,但是我在這個觀念下迷惑了自己,認爲在獲取同一列表中的不同類型的元素的索引時同樣可以。其實不然,就像我展示的代碼段一樣,不同的數據類型在列表中獲取索引的時候就會出錯。
當我修改代碼段爲:

import numpy as np

a = [0, 1, 2]
a = np.array(a).tolist()
b = [0, 2, 3]
c = [a, b]
for i in c:
    print(c.index(i))

也即是把a的數據類型由numpy.array變成了list,統一數據類型,此時問題就解決了,得到輸出:

0
1

關於爲什麼列表中不同數據類型求索引會出錯,具體的我也不太明白,歡迎大佬指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章