【问题标题】:How to use list of values with statistics in python如何在python中使用带有统计信息的值列表
【发布时间】:2020-03-19 14:03:27
【问题描述】:

目前我使用的代码是:

import os
import math
import statistics
def main ():
    infile = open('USPopulation.txt', 'r')
    values = infile.read()
    infile.close()
    values = values.split('\n')
    index = 0
    for _ in values:
        values[index] = int(values[index])
    while index < len(values):
        index += 41
    print(values)
 main()

此代码为我提供了以下输出,它似乎是我正在使用的文本文件中的整数值列表。

[151868, '153982', '156393', '158956', '161884', '165069', '168088', '171187', '174149', '177135', '179979', '182992', '185771', '188483', '191141', '193526', '195576', '197457', '199399', '201385', '203984', '206827', '209284', '211357', '213342', '215465', '217563', '219760', '222095', '224567', '227225', '229466', '231664', '233792', '235825', '237924', '240133', '242289', '244499', '246819', '249623']

我的任务是创建一个程序,显示该时间段内人口的平均变化。在此期间人口增长最大的年份。在该时间段内(与上一年相比)人口增长最小的年份。

我完全不知道如何实现这一点或在哪里检查资源的逻辑,我的教科书对此没有太大帮助。

例如:当我添加以下代码时:

pop = sum(values)
print(statistics.mean(pop))

我收到此错误:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

非常感谢您的帮助。不知道在这里做什么。

【问题讨论】:

  • "values" 的类型不是 int,因此 sum 不适用,values= [int(i) for i in values]
  • 另一件事是,"mean" 使用可迭代,"pop" 是值的总和,它不可迭代,你应该print(statistics.mean(values))

标签: python python-3.x statistics


【解决方案1】:

正如@jan 提到的,您的问题之一是当您尝试将字符串列表转换为 int 列表时。你应该这样做:

values= [int(i) for i in values]

或者@jan 说的那个也可以。 在那之后意味着操作需要两个值,或者在这种情况下,它会获取一个列表并将其长度用作您在代码中未提供的第二个值。这为您提供了人口的平均值:

print(statistics.mean(values))

但我认为您想要人口增长的平均值,而不仅仅是人口。在这种情况下,您需要有另一个差异列表,然后计算其平均值。

diff=[second-first for first, second in zip(values,values[1:])]

列表“diff”将包含每个连续年份的差异值。 您可以在此列表中执行minmaxmean 之类的操作,以获得您想要的。

【讨论】:

  • 正确,我试图获得每年的平均人口增长以及从一年到下一年的最大和最小变化。列表中的每个值都显示了 1940、1941、1942、1943 等一直到 1990 年的人口
  • 谢谢prhmma,这帮助很大!这段代码给出了正确的输出 def main (): infile = open('USPopulation.txt', 'r') values = infile.read() infile.close() values = values.split('\n') values= [int(i) for i in values] diff=[second-first for first, second in zip(values,values[1:])] print('Average Change:',statistics.mean(diff)) print('最大增加:',max(diff)) print('最小增加:',min(diff))
【解决方案2】:

您的代码中存在一些缺陷,但您遇到的实际错误来自您没有增加 index 变量这一事实:

values = list(map(int, values))

可能是您所追求的(而不是 for 循环)。在此之后,至少 TypeError 应该消失了。此外,考虑使用with 而不是手动打开/关闭文件。话虽如此,您可以将整个 main 缩短为:

def main ():
    with open("USPopulation.txt", "r") as infile:
        values = list(map(int, infile.read().splitlines()))
        return values

【讨论】:

  • 感谢您建议使用with。为什么选择list(map()) 而不是列表理解?
  • @AlexanderCécile:真的没有什么特别的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 2020-09-28
  • 2016-06-21
相关资源
最近更新 更多