2016-11-04 83 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]