如何计算符合特定标准的列表项的百分比?

2024-06-03 03:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个程序,查看一个包含美国冰雹数据的文件。我已经成功地创建了一个包含对象(所有州)的类,并具有州缩写、总的冰雹报告数量以及每个州/对象的冰雹大小列表。在

我要做一个表格,显示每个州冰雹大小的统计数字。我创建了一个方法来平均每个州的冰雹大小,但我不知道如何创建一个方法来计算冰雹大小在一定范围内的百分比。在

对于这些冰雹大小,该表分为5类:<;1.25,1.25-1.99,2.0-2.49,2.5-2.99,>;3.0。
我很确定我需要对每个类别做一个滚动求和,但我就是不知道如何对这么多类别进行汇总。如果我能做一个滚动汇总,那就是这个总数/那个州的报告总数。在

以下是我目前掌握的代码:

class stateHail: def __init__(self, state): self.stateAbbr = state self.hailReports = 0 self.hailSize = [] def avgSize(self): self.avg = (sum(self.hailSize))/self.hailReports #def percents(self): #??? #Creates objects needed for class states = [] for x in ["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "WA", "WV", "WI", "WY", "PR", "VA", "VI"]: stateObject = stateHail(x) states.append(stateObject) #Opens file and assigns state abbreviation, hail report number, and list of hail sizes to each object/state fileHail = open("90-99_hail.csv", "r") try: for line in fileHail: splitLine=line.split(",") abbrFile=splitLine[7] for x in states: if (abbrFile==x.stateAbbr): x.hailSize.append(float(splitLine[10])) x.hailReports = x.hailReports + 1 except: fileHail.close() #Calculates average for each state for x in states: if (x.hailReports>100): x.avgSize() print x.avg

Tags: 对象方法inselffordef报告state
2条回答

如果你有这样的冰雹大小列表:[1.1,1.1,1.6,1.6,2.1,2.6,3.1,3.1,3.1]

您可以得到这样的列表:[2, 2, 1, 1, 3]

从这里:

return [len([item for item in self.hailSize if small<=item<big]) for small,big in [(0,1.25), (1.25,2), (2,2.5), (2.5,3), (3,200)]]

顺便说一句,不用保存self.hailReports变量来计算self.hailSize中有多少个元素,而只需使用len(self.hailSize)。接下来,让avgSize()简单地做return sum(self.hailSize)/len(self.hailSize),然后你就不必一直调用函数来更新一个变量——只需使用avgSize()来获得平均大小。在

如果我正确理解您的问题,那么您可以将每个范围的百分比存储在一个列表中。代码可能如下所示

    self.percentages = [(self.hailSize[i]/self.hailReports) * 100 for i in range(5)]

相关问题 更多 >