首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用statistics.mean()时使用的列表

调用statistics.mean()时使用的列表
EN

Stack Overflow用户
提问于 2017-01-24 22:02:38
回答 1查看 827关注 0票数 2

我试图读取一行由空格分隔的整数值,然后对它们执行一些简单的统计计算。

一个示例输入行如下所示:

代码语言:javascript
复制
64630 11735 14216

我决定使用这里记录的中的statistics模块:https://docs.python.org/3/library/statistics.html

这就是它的作用:

代码语言:javascript
复制
import sys
import statistics

values = map(int, sys.stdin.readline().split())

print(statistics.mean(values))
print(statistics.median(values))
print(statistics.mode(values))

执行后,我从stderr获得以下输出

代码语言:javascript
复制
Traceback (most recent call last):
  File "file.py", line 7, in <module>
    print(statistics.median(values))
  File "/usr/lib/python3.4/statistics.py", line 313, in median
    raise StatisticsError("no median for empty data")
statistics.StatisticsError: no median for empty data

因此,对statistics.mean()的第一个调用似乎是在调用statistics.median()之前使用values列表中的所有元素。(我确实看到了来自stdout的第一个stdout语句的输出,因此对statistics.mean()的调用运行良好。)

输入处理似乎没有任何问题。我有如下代码,如预期的那样工作:

代码语言:javascript
复制
import sys
import statistics

values = map(int, sys.stdin.readline().split())

for v in values:
    print(v)

stdout输出以下内容

代码语言:javascript
复制
64630
11735
14216

标准库文档中没有提到使用传入的参数的这些函数。这些标准函数中的每一个只应返回一个值,而不应更改列表本身。

是否有特定于Python的东西,其中一个列表只能被读取或迭代一次?或者,我尝试过的两个编译器是否都有怪癖?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 22:03:54

map()生成一个可迭代的,并且迭代只能进行一次。如果您希望能够重用结果,请首先从map()结果中生成一个列表:

代码语言:javascript
复制
values = list(map(int, sys.stdin.readline().split()))

您还可以使用列表理解:

代码语言:javascript
复制
values = [int(i) for i in sys.stdin.readline().split()]

演示,使用list(map(...))

代码语言:javascript
复制
>>> from io import StringIO
>>> import statistics
>>> demo = StringIO('64630 11735 14216\n')
>>> values = list(map(int, demo.readline().split()))
>>> print(statistics.mean(values))
30193.666666666668
>>> print(statistics.median(values))
14216
>>> print(statistics.mode(values))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.6/statistics.py", line 507, in mode
    'no unique mode; found %d equally common values' % len(table)
statistics.StatisticsError: no unique mode; found 3 equally common values

您输入的3个唯一值没有模式,因此出现了最后一个异常。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41839769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档