2016-11-04 120 views
0

我試圖從列表中刪除字符串,然後找到具有較小長度的列表的新列表的總和。以不同的列表長度添加兩個列表

我寫了一個代碼,在3-4個地方不起作用。我有一些問題, 爲什麼if語句不能正常工作? 如何以不同的長度爲這種列表編寫添加函數?

這是我的代碼:

def remove_text_from_list(the_list): 
    z = [] 
    for x in the_list: 
     if isinstance(x, float): 
      z.append(x) 
      return z 


def add(a,b): 
    return a+b 

x = [] 
list1=['s', 1.0, 2.0, 'a', 3.0, 4.0,'b', 5.0, 6.0,'c', 7.0, 8.0] 
list2=[10.0, 20.0] 
newlist=remove_text_from_list(list1) 
for i in newlist: 
    for j in list2: 
     f = add(i,j) 
     final_list.append(f) 
print(x) 

期望的結果應該是像下面:

final_list=[11,22,13,24,15,26,17,28] 
+0

什麼是你期待'remove_test_from_list'做什麼,它是什麼摻雜呢? –

回答

0

您在if語句返回列表。如果在for循環的結束做它應該工作:

def remove_text_from_list(the_list): 
    z = [] 
    for x in the_list: 
     if isinstance(x, float): 
      z.append(x) 
    return z 

但還是X不會是你的預期final_result但:

x = [11.0, 21.0, 12.0, 22.0, 13.0, 23.0, 14.0, 24.0, 15.0, 25.0, 16.0, 26.0, 17.0, 27.0, 18.0, 28.0] 
2

用生成器表達式來創建一個發電機從list1產生花車。根據需要使用itertools.cycle重複執行list2。使用zip將來自list1的花車與來自list2的循環條目配對,並將它們一起添加到列表理解中。

>>> from itertools import cycle 
>>> just_floats = (i for i in list1 if isinstance(i, float)) 
>>> [a+b for a, b in zip(just_floats, cycle(list2))] 
[11.0, 22.0, 13.0, 24.0, 15.0, 26.0, 17.0, 28.0]