2015-11-02 50 views
0

因此,我將所有模型和平均mpg列在函數中。當變量重複時添加到列表中

在那裏我有

list1 = ['DODGE',20, 'BMW', 28, 'FORD',25, 'DODGE',28,'FORD',20] 

和預期產量

list_out = ['DODGE', 24, 'BMW',28, 'FORD', 22.5] 

到目前爲止我的代碼是

def average_mpg_by_maker(mileage_list): 
    maker_list = [] 
    total_hwy = 0 
    counter = 0 
    list_makers = [] 
    for hwy_mpg, maker in mileage_list: 
     if maker not in maker_list: 
      maker_list.append(maker) 

    for make in maker_list: 
     total_hwy += hwy_mpg 
     counter +=1 
     list_makers.extend([make,total_hwy]) 
    return list_makers 

導致所有MPG不斷增加不管模型。 我該如何解決它?

編輯:計數器是使總MPG可以 'DODGE' appeared 2 times so 48/2= 24 mpg

+0

您的示例代碼似乎表明您的實際'mileage_list'是一個元組列表,每個元組包含一個字符串和一個整數,而不是具有交替字符串和整數值的列表。 –

+0

你爲什麼寫'counter + = 0'? –

+0

請添加一個輸入示例,其中包含預期輸出和實際輸出。 –

回答

1

你的代碼是由make出現例如次數鴻溝似乎依靠神奇hwy_mpg;該值只是mileage_list的最後一個值。

商店總到目前爲止和字典的數項的,由 廠商鍵:

def average_mpg_by_maker(mileage_list): 
    per_maker = {} 
    for maker, mpg in mileage_list: 
     info = per_maker.setdefault(maker, {'total': 0, 'count': 0}) 
     info['total'] += mpg 
     info['count'] += 1 
    return [(maker, info['total']/info['count']) for maker, info in per_maker.items()] 

你也可以簡單地組條目進入名單,鍵控的製造商,並值相加以後:

def average_mpg_by_maker(mileage_list): 
    per_maker = {} 
    for maker, mpg in mileage_list: 
     per_maker.setdefault(maker, []).append(mpg) 
    return [(maker, sum(entries)/len(entries)) for maker, entries in per_maker.items()] 

上述功能假定您的mileage_list使用元組每個條目:

list1 = [('DODGE', 20), ('BMW', 28), ('FORD', 25), ('DODGE', 28), ('FORD', 20)] 

輸出使用浮點值,始終堅持:

>>> def average_mpg_by_maker(mileage_list): 
...  per_maker = {} 
...  for maker, mpg in mileage_list: 
...   info = per_maker.setdefault(maker, {'total': 0, 'count': 0}) 
...   info['total'] += mpg 
...   info['count'] += 1 
...  return [(maker, float(info['total'])/info['count']) for maker, info in per_maker.items()] 
... 
>>> list1 = [('DODGE', 20), ('BMW', 28), ('FORD', 25), ('DODGE', 28), ('FORD', 20)] 
>>> average_mpg_by_maker(list1) 
[('FORD', 22.5), ('DODGE', 24.0), ('BMW', 28.0)] 

輸出的順序從你期望的輸出不同,因爲字典順序是任意的,取決於當前hash randomisation value以及。

0

你可以使用字典來代替:

dict1 = {'DODGE':20, 'BMW': 28, 'FORD',25, 'DODGE',28,'FORD',20} 
replication=dict1 
dict2={} 
return_dict={} 
for key in replication.keys(): 
    if key not in return_dict.keys(): 
     return_dict[key]=replication[key] 
     dict2[key]=1 
    else: 
     return_dict[key]+=replication[key] 
     dict2[key]+=1 
    del replication[key] 
for key in return_dict.keys(): 
    return_dict[key]/=dict2[key] 
return return_dict 

我認爲這應該工作。