我需要一个程序来获取列表列表并从列表中删除最低分数并打印平均分数。
例如,如果给定:[[100,0,100] , [50,50,0] , [0,0,0]]
它应该打印:
Average for row 0 is 100.0
Average for row 1 is 50.0
Average for row 2 is 0.0
到目前为止,我有这个,但它不允许我输入列表列表,也不会打印到相应的行。
def Averages (listofscores):
numofrows = 0
for number in listofscores:
scores = (sum (listofscores) - min (listofscores)) / ((len (listofscores)) - 1)
rows = listofscores [0]
if rows >=0:
print ('Average for row', numofrows, 'is', scores)
numofrows = numofrows + 1
else:
return None
答案 0 :(得分:3)
循环,删除最小的项目,然后找到平均值。非常简单
scores = [[100,0,100], [50,50,0] , [0,0,0]]
for i, item in enumerate(scores):
item.remove(min(item))
print("Average score for row", i, "is", sum(item)/len(item))
i = 0
for item in scores:
item.remove(min(item))
print("Average score for row", i, "is", sum(item)/len(item))
i += 1
(实际上并没有使用这段代码)如果你好奇它是如何工作的,它获取最小项的索引,而不是使用Python的切片表示法创建一个新的列表,不包括该索引,然后得到该列表的总和并划分它按原始列表的长度 - 1.它不会更快,因为它重复了很多相同的工作。
scores = [[100,0,100], [50,50,0] , [0,0,0]]
print([sum(item[:item.index(min(item))]+item[item.index(min(item))+1:])/(len(item)-1) for item in scores])
#[100.0, 50.0, 0.0]
答案 1 :(得分:1)
您应该迭代行,而不是特定项目。你的功能几乎是正确的:
def Averages (listofrows):
for rownum, row in enumerate(listofrows):
score = (sum(row) - min(row)) / (len(row) - 1)
print('Average for row', rownum, 'is', score)
答案 2 :(得分:0)
你可以像这样阅读输入fron stdout:
l=int(raw_input("Number of Lists"))
lst=[]
while(l>0):
lst1=raw_input("Enter list : ").split()
lst.append(lst1)
l=l-1
print(lst)
然后你可以像这样计算每个子列表的平均值/平均值:
for a in lst:
for elm in a:
sum=0
sum =sum + int(elm)
print("Average for row ",a," is ",sum/(len(a)*1.0))