Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算python中列表的平均值,不包括文字_Python_List_Average_Literals_Mean - Fatal编程技术网

计算python中列表的平均值,不包括文字

计算python中列表的平均值,不包括文字,python,list,average,literals,mean,Python,List,Average,Literals,Mean,在Python中,我有如下列表: [[1,2,3, 'L'], ['L'], [1]] 我想计算每个子列表所有数值元素的平均值。因此,应排除“L”值。上述示例的结果应为: [2, [], 1] 有什么快速的方法可以在一条线上完成吗 谢谢。为了得到您要求的确切结果,我会这样做: from __future__ import division import numbers def average_over_numeric_values(a): filtered = [x for x in

在Python中,我有如下列表:

[[1,2,3, 'L'], ['L'], [1]]
我想计算每个子列表所有数值元素的平均值。因此,应排除“L”值。上述示例的结果应为:

[2, [], 1]
有什么快速的方法可以在一条线上完成吗


谢谢。

为了得到您要求的确切结果,我会这样做:

from __future__ import division
import numbers
def average_over_numeric_values(a):
    filtered = [x for x in a if isinstance(x, numbers.Number)]
    if filtered:
        return sum(filtered) / len(filtered)
    return []
print(map(average_over_numeric_values, list_of_lists))
这不完全是一行,而是一种非常可读的方式


就我个人而言,如果列表中没有空值,我就不会使用
[]
似乎更合适。

要获得您要求的确切结果,我会这样做:

from __future__ import division
import numbers
def average_over_numeric_values(a):
    filtered = [x for x in a if isinstance(x, numbers.Number)]
    if filtered:
        return sum(filtered) / len(filtered)
    return []
print(map(average_over_numeric_values, list_of_lists))
这不完全是一行,而是一种非常可读的方式


就个人而言,如果列表中没有空值,我不会使用
[]
None
似乎更合适。

假设您已经导入了
numpy
数字,这里有一个非常不可读的单行代码。没有数字元素的列表在结果列表中显示为
nan

[numpy.mean([x for x in sublist if isinstance(x, numbers.Number)]) for sublist in mainlist]

假设您已经导入了
numpy
numbers
,那么这是一个非常不可读的单行程序。没有数字元素的列表在结果列表中显示为
nan

[numpy.mean([x for x in sublist if isinstance(x, numbers.Number)]) for sublist in mainlist]
鉴于:

如果您必须有一个内衬:

[sum(w)/float(len(w)) if w else w for w in [[z for z in y if isinstance(z, numbers.Number)] for y in x]]
鉴于:

如果您必须有一个内衬:

[sum(w)/float(len(w)) if w else w for w in [[z for z in y if isinstance(z, numbers.Number)] for y in x]]

您是特别想要一条线,还是尽可能短的线?我很确定你不能只在一行中完成,因为你至少要完成2到3个不同的高级操作。尽可能短的工作!我只是想有一个更聪明的方法来做这件事,而不是迭代每个子列表,检查它是否是“L”,递增计数器和总和,等等。为什么结果是
[2,[],1]
而不是
[2,0,1]
?@Zoozy:空列表上的平均值是未定义的,而不是0。我可能会使用
None
float(“nan”)
作为未定义的值。@jamylak,好吧,当然,我想有一些嵌套的列表理解。。。但是男人,这会很难看。你是特别想要一条线,还是尽可能短的线?我很确定你不能只在一行中完成,因为你至少要完成2到3个不同的高级操作。尽可能短的工作!我只是想有一个更聪明的方法来做这件事,而不是迭代每个子列表,检查它是否是“L”,递增计数器和总和,等等。为什么结果是
[2,[],1]
而不是
[2,0,1]
?@Zoozy:空列表上的平均值是未定义的,而不是0。我可能会使用
None
float(“nan”)
作为未定义的值。@jamylak,好吧,当然,我想有一些嵌套的列表理解。。。但是人类会很难看。如果len(filtered)
if filtered
在封面下的功能不一样吗?哪个更简洁?
如果filtered,则返回np.mean(filtered)if else[]
sum([])==0
所以
0
是一个更一致的选择。@wim:使用NumPy,我只会做
NumPy.mean(filtered)
,对于空输入返回
nan
。@J.F.Sebastian:平均值将是
sum([])/len([])
,这是未定义的,而不是零。如果len(filtered),则
如果filtered
,则封面下的功能不一样吗?这更为简洁?
如果filtered,则返回np.mean(filtered)
sum([])==0
因此
0
是一个更加一致的选择。@wim:使用NumPy,我只需执行
NumPy.mean(筛选)
,它会为空输入返回
nan
。@J.F.Sebastian:平均值将是
sum([])/len这是未定义的,而不是零。