2017-08-29 62 views
-4

捎帶上this question創建函數比較不等名單

我想創建一個函數來比較兩個列表:

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]

爲什麼會出現這種情況?

+0

列表必須具有相同的長度 –

+2

示例:'c [item]'被評估爲'c [5]',並且沒有這樣的索引。 – alfasin

回答

1

有你的代碼的幾個問題:

  1. c[item]將引用c列表「項」指標。它不會像您打算的那樣將「item」的值添加到列表中。例如:5是兩個列表中的第一個共同值。 c[5]引用c數組中不存在的第6個元素;因此你的錯誤。

  2. 您正在使用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]

+0

現在有道理。感謝您打破這一點。 – GenXeral

+0

有沒有辦法在for語句中包含一個唯一的語句,它不會在c中重複數字? – GenXeral

+0

試着改變if語句爲: 'if(item in a)and(item not in c):' –

0

您正在嘗試訪問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。 如果這些元素存在,這很有用,但如果不存在,則不會太多。

0

對於您的算法,您的列表將需要相同的長度。但是你可以改進它來比較可變長度列表。