use*_*702 5 python string list
我刚刚开始使用Python类,我真的需要一些帮助.请记住,如果你回答这个问题,我是新手.
我必须制作一个程序,它取特定列表中所有元素的平均值"l".这本身就很简单; 问题是老师要我们在做平均值之前删除列表中的任何空字符串.
因此,当我收到列表时,[1,2,3,'',4]我希望函数忽略''平均值,并取其他4/len(l)的平均值.谁能帮我这个?
也许一个循环不断比较列表中的某个位置和从列表中''删除它们?我试过了,但它不起作用.
Mat*_*att 13
您可以使用列表推导删除以下所有元素'':
mylist = [1, 2, 3, '', 4]
mylist = [i for i in mylist if i != '']
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过将总和除以列表中元素的数量来计算平均值:
avg = sum(mylist)/len(mylist)
Run Code Online (Sandbox Code Playgroud)
根据您的应用程序,您可能希望平均值为浮点数而不是int值.如果是这种情况,请先将其中一个值转换为float:
avg = float(sum(mylist))/len(mylist)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用python 3的部门:
from __future__ import division
avg = sum(mylist)/len(mylist)
Run Code Online (Sandbox Code Playgroud)
你可以使用filter():
filter()list如果我们在Python 3中传递一个列表,那么在Python 2中返回一个iterator.正如@PhilH所建议的,您可以itertools.ifilter()在Python 2中使用 它来获取迭代器.
要在Python 3中使用列表作为输出 list(filter(lambda x:x != '', lis))
In [29]: lis = [1, 2, 3, '', 4, 0]
In [30]: filter(lambda x:x != '', lis)
Out[30]: [1, 2, 3, 4, 0]
Run Code Online (Sandbox Code Playgroud)
注意过滤任何虚假值,您只需使用filter(None, ...):
>>> lis = [1, 2, 3, '', 4, 0]
>>> filter(None, lis)
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
Rag*_*gar -1
mylist = [1, 2, 3, '', 4]
newlist = []
for i in mylist:
try:
newlist.append(int(i))
except ValueError:
pass
avg = sum(newlist)/len(newlist)
Run Code Online (Sandbox Code Playgroud)