Я пытаюсь прочитать строку целочисленных значений, разделенных пробелами, а затем выполнить несколько простых статистических вычислений на них.Список, используемый при вызове статистики.mean()
Пример строка ввода выглядит так:
64630 11735 14216
Я решил использовать statistics
модуль из стандартной библиотеки Python документированной здесь: https://docs.python.org/3/library/statistics.html
Вот это в действии:
import sys
import statistics
values = map(int, sys.stdin.readline().split())
print(statistics.mean(values))
print(statistics.median(values))
print(statistics.mode(values))
После выполнения, я получаю следующий результат от stderr
:
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()
потребляет все элементы в списке values
перед вызовом statistics.median()
их можно использовать. (Я вижу вывод из первого print
с stdout
, поэтому звонок statistics.mean()
работал нормально.)
Обработка ввода не вызывает никаких проблем. У меня есть следующий код, который работает, как ожидалось:
import sys
import statistics
values = map(int, sys.stdin.readline().split())
for v in values:
print(v)
Выведение следующие из stdout
:.
64630
11735
14216
Ничто в стандартной документации библиотеки не упоминает эти функции потребляя параметр, передаваемый в каждом из этих стандартных функций должен возвращать только значение, а не изменять сам список.
Есть ли что-то конкретное для Python, где список можно читать или повторять только один раз? Или, возможно, есть причуда с обоими компиляторами, которые я пробовал?
'map()' действительно возвращает итератор вместо того же типа, который передавался, как я предполагал. Спасибо за ваш ответ! – bmedev