我正在尝试从列表中删除字符串,然后使用长度较小的列表查找新列表的总和。
我编写的代码在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 :(得分: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]
答案 1 :(得分: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]