我想創建一個函數來比較兩個列表:
def test(a,b):
c=[]
for item in b:
if item in a:
return c[item]
上面的功能給我一個錯誤:列表索引超出範圍,如果我定義和和b: a = [2,3,5,8] b = [4,5,6,9,8]
爲什麼會出現這種情況?
我想創建一個函數來比較兩個列表:
def test(a,b):
c=[]
for item in b:
if item in a:
return c[item]
上面的功能給我一個錯誤:列表索引超出範圍,如果我定義和和b: a = [2,3,5,8] b = [4,5,6,9,8]
爲什麼會出現這種情況?
有你的代碼的幾個問題:
c[item]
將引用c
列表「項」指標。它不會像您打算的那樣將「item」的值添加到列表中。例如:5是兩個列表中的第一個共同值。 c[5]
引用c
數組中不存在的第6個元素;因此你的錯誤。
您正在使用return
,該函數結束函數調用,並將簡單地將c[5]
的值傳遞給該函數的調用者。
嘗試以下操作:
def test(a,b):
c=[]
for item in b:
if item in a:
c.append(item)
return c
.append(item)
將在引用列表的末尾添加的item
值作爲一個新的元素。
一旦循環結束,函數現在將返回整個c
列表按照您的意圖。
使用您的示例列表a = [2, 3, 5, 8]
和b = [4, 5, 6, 9, 8]
,調用test(a, b)
正確返回[5, 8]
。
您正在嘗試訪問c中不存在的項目。 嘗試運行這個,看看你的輸出是什麼:
a=[2,3,5,8]
b=[4,5,6,9,8]
c=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
for item in b:
if item in a:
print(c[item])
你得到第5項和8 - 'f' 和 'i' 的從C。 如果這些元素存在,這很有用,但如果不存在,則不會太多。
對於您的算法,您的列表將需要相同的長度。但是你可以改進它來比較可變長度列表。
列表必須具有相同的長度 –
示例:'c [item]'被評估爲'c [5]',並且沒有這樣的索引。 – alfasin