2015-11-02 51 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 
相关问题