2015-06-14 38 views
-2

我這樣做的關鍵是學習如何在不使用給定的內置函數(如sort(),max()min())的情況下對python進行編碼。我需要創建一個以2個列表作爲參數的函數,並創建一個新列表,其中包含正在傳遞給函數的2個列表的相似值。 new_list不能重複,因此如果list1= [1,2,2,3,4]list2 = [1,2,2,3,4]我的new_list應該= [1,2,3,4]。我使用的函數的問題是我使用函數in中內置的python來檢查x是否不在new_list中。如何擴展此函數以檢查值是否已經在new_list之內,而不使用python的內置函數?創建一個列表,填充兩個不同列表的相似值

def alike_values(list1, list2): 
    new_list = [] 
    for i in list1: 
     for x in list2: 
      if i == x and x not in new_list: 
       new_list.append(i) 
    return new_list 
+0

使用'for'和遍歷所有項目或維持一個「字典」 – Tempux

+0

我能理解,避免爲了學習如何編寫基本算法,如'max'和'min'使用內建的。 ..但是,我想,避免使用'in'會讓我覺得這太過分了。 – jme

回答

1

您可以創建第二個功能,即檢查該值已包含在列表:

def alike_values(list1, list2): 
    new_list = [] 
    for i in list1: 
     for x in list2: 
      if i == x and not in_list(new_list, x): 
       new_list.append(i) 
    return new_list 

def in_list(li, val): 
    for i in li: 
     if i == val: 
      return True 
    return False 
+0

需要是1個單一功能。 – stacker

+0

爲什麼?爲什麼? – miindlek

0

你能做到這一點沒有內置函數,但我敢肯定,你不會能夠訂購它們。你可以做的是:

def alike_values(list1, list2): 
     combined_list = sorted(list1 + list2) 
     new_list = list(set(combined_list)) 
     return new_list 
1

你可以在一行中實現這一點。只需使用基本的設置屬性。下面給出了這樣做的代碼。

combined_list = list(set(list1).intersection(list2))