2016-10-27 110 views
-1

我最近開始使用Python編程,並且編寫了一個簡單的函數,它需要兩個列表並返回一個新的列表,這兩個列表重合。但是,當我運行代碼時,它返回一個空列表。請幫助:python程序返回空列表

x = [1, 2, 3] 
y = [4, 5, 6] 


def reunion(list_of_numbers1,list_of_numbers2): 
    union_list = list() 
    for i in range(0,len(list_of_numbers1)): 
     if list_of_numbers1[i] in list_of_numbers2 is True: 
      union_list.append(i) 
      del list_of_numbers1[i] 
      del list_of_numbers2[i] 
    return union_list 
z = reunion(x,y) 
print(z) 
+0

請在發佈Python代碼時準確再現您的縮進。嚴重縮減的Python代碼是無稽之談。 – khelwood

+1

這段代碼顯然會返回一個空列表,因爲在這兩個列表之間沒有共享元素(這個代碼還有其他一些錯誤)。 – UnholySheep

+0

此代碼的預期輸出是什麼?因爲你是如果語句沒有得到處理,因爲'i'不在'list_of_numbers2'中,所以沒有任何東西會被追加。 – RoadRunner

回答

1

在你的例子中,它應該返回你一個空的列表,因爲沒有共同的數字。

你想做的事:

for number in list_of_numbers1: 
    if number in list_of_numbers2: 
     union_list.append(number) 

這可能會產生重複。爲了避免這些,

for number in list_of_numbers1: 
    if number in list_of_numbers2 and number not in union_list: 
     union_list.append(number) 

不過,我會做這樣的

return [number for number in list_of_numbers1 if number in list_of_numbers2] 
+0

或者只是使用內置函數:'return list(set(list_of_numbers1)&set(list_of_numbers2))' – UnholySheep

+0

這是一個非常好的解決方案。 RoadRunner在下面提到它 – kameranis

1

我可以看到你的代碼的兩個主要問題:在指數第一個列表的元素

  1. i迭代,所以它的那些指標,而不是元素本身,你正在查找第二個列表。

  2. 在Python,刪除你遍歷列表的元素是有問題的:Python: Removing list element while iterating over list

1

像這樣的事情會給你一個良好的開端:

x = [1, 2, 3, 2] 
y = [3, 5, 2, 3] 

def reunion(list1, list2): 
    result = [] 
    for number in list1: 
     if number in list2 and number not in result: 
      result.append(number) 
    return result 

my_list = reunion(x, y) 
print(my_list) 

輸出:

[2, 3] 

或者更接近你的代碼:

def reunion(list1, list2): 
    result = [] 
    for i in range(0, len(list1)): 
     if list1[i] in list2 and list1[i] not in result: 
      result.append(list1[i]) 
    return result