从列表中删除空字符串

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)

浮点平均值(假设python 2)

根据您的应用程序,您可能希望平均值为浮点数而不是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)

  • 由于OP特别希望摆脱空字符串,我认为这是最好的解决方案,它清晰简洁. (2认同)

Ash*_*ary 7

你可以使用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)

  • 这有点危险,因为“0”也可能被删除。 (5认同)