我从文本文件中排序数据有一半的问题。我想从3个数字中找到加权的平均值,并打印出文本文件中特定平均值所属的名称。
我已经设法以最高的平均值做到了这一点,但我遇到了一些问题,找到了最低的平均值。
文件中的示例文字。
Shoes 210 130 67
Bags 167 321 459
文本文件中的位置0是部门的名称。文件中的位置1是“好的投票”'。位置2'公平投票'。排名3'可怜的投票'。
列表中的最高平均值是平均为2.351的鞋子,列表中的最低平均值为平均值为1.692的手袋。
我已经定义了一个函数来计算平均值,并且在没有任何问题的情况下调用它来获得最高平均值。
highestAverage = 0
highestAvgDepName = 0
if choice2 == 1:
calculateAverage(allDepartments,choice2)
for x in range (10):
if highestAverage < calculateAverage(allDepartments, x):
highestAverage = calculateAverage(allDepartments, x)
highestAvgDepName = x
我唯一的问题是让它找到最低的平均值。我已经尝试创建一个计算平均值并将其乘以-1的新函数,将所有数字设为负数,这在技术上应该是最大数字-1.692,但它会让我55. ***。
我已经研究了泡泡分类,但是,我不知道如何从文本文件中做到这一点。
def calculateAverage(allDepartments, choice2):
total = allDepartments[choice2][1] + allDepartments[choice2][2] + allDepartments[choice2][3]
return((allDepartments[choice2][1]*3 + allDepartments[choice2][2]*2 + allDepartments[choice2][3])/total)
答案 0 :(得分:0)
您可以使用:
highestAverage = 0
highestAvgDepName = 0
if choice2 == 1:
calculateAverage(allDepartments,choice2)
for x in range (10):
if highestAverage > calculateAverage(allDepartments, x):
highestAverage = calculateAverage(allDepartments, x)
highestAvgDepName = x
答案 1 :(得分:0)
您可以将您的部门存储在平均键入的字典中,然后将您的平均值存储在列表中并对列表进行排序以获得最高和最低平均值
def calculateAverage(choice2):
total = choice2[0] + choice2[1] + choice2[2]
return((choice2[0]*3 + choice2[1]*2 + choice2[2])/total)
d={}
l = []
with open(file,'r') as f:
for i in f:
tmp = i.split()
avg = calculateAverage([float(j) for j in tmp[1:]])
d[avg] = tmp[0]
l.append(avg)
l = sorted(l)
print 'Highest: {} {:.4}'.format(d[highest], highest)
print 'Lowest: {} {:.4}'.format(d[lowest], lowest)
Highest: Shoes 2.351
Lowest: Bags 1.692
或者你可以这样做,使用更少的内存
def calculateAverage(choice2):
total = choice2[0] + choice2[1] + choice2[2]
return((choice2[0]*3 + choice2[1]*2 + choice2[2])/total)
d={}
l = []
highest = -100000
lowest = 100000
with open(file,'r') as f:
for i in f:
tmp = i.split()
avg = calculateAverage([float(j) for j in tmp[1:]])
d[avg] = tmp[0]
if avg > highest:
highest = avg
if avg < lowest:
lowest = avg
print 'Highest: {} {:.4}'.format(d[highest], highest)
print 'Lowest: {} {:.4}'.format(d[lowest], lowest)