2015-11-02 52 views
2

所以我做了一個函數,通過一個包含汽車製造商,城市MPG和公路MPG的元組列表。爲什麼不打印沒有重複元組的元組列表?

def maker(mileage_list): 
    maker_list = [] 
    for line in mileage_list: 
     if line[2] not in maker_list: 
      maker_tuple = (line[2],int(line[0]),int(line[1])) 
      maker_list.append(maker_tuple) 
    return maker_list 

在哪裏,如果

mileage_list = [('DODGE', 13, 18), ('DODGE', 16, 22), 
       ('DODGE', 16, 22), ('DODGE', 16, 21), 
       ('FORD', 16, 24), ('FORD', 20, 26), 
       ('FORD', 22, 28), ('FORD', 18, 24), 
       ('FORD', 34, 30), ('FORD', 12, 18)] 

應該只打印maker_list =[('DODGE',13,18),('FORD',16,24)]但它仍然打印出的原始輸入。

+0

'maker_list'包含元組。 'line [2]'是一個字符串。你正在檢查這個字符串是否是其中的一個元組,這當然是不可能的。 –

回答

5

line[2]將永遠不會在mileage_list中,因爲它是一個字符串,並且mileage_list中的項是元組,並且這兩個元素永遠不會相等。因此它會一直添加每個項目。另外,line[2]是你的高速公路MPG(作爲一個字符串),而不是製造商,所以即使它以你想要的方式工作,它仍然會有很多重複。

我會使用單獨的set來跟蹤您所看到的製造商。

def maker(mileage_list): 
    maker_set = set() 
    maker_list = [] 
    for maker, city_mpg, hwy_mpg in mileage_list: 
     if maker not in maker_set: 
      maker_list.append((maker, int(city_mpg), int(hwy_mpg)) 
      maker_set.add(maker) 
    return maker_list 
相關問題