我已经用下面的代码解决了这个问题,但是我试图理解一种更好的方法来删除每个数字字符串末尾的零,因为它们会抛弃计算。我的解决方案似乎很重,有没有更优雅的方法来解决这个问题而没有for循环移除0?
确定一系列数字的平均值:
97 143 3 149 1 181 195 76 0
8042 4302 1273 3858 4019 8051 4831 7747 4887 768 6391 7817 2635 6203 0
1783 218 154 360 409 929 1503 428 73 1505 1868 1625 64 1613 0
import sys
inp = sys.stdin.readlines()
lin = []
for i in inp[1:]:
lin.append(map(int,i.split()))
/ --- ----症结
for r in lin:
del r[-1]
/ -------------
for n in lin:
print int(round((sum(n) / float(len(n))))),
赞赏任何其他批评和建设性批评。
答案 0 :(得分:0)
您可以使用切片和列表理解一次性完成所有操作:
lin = [map(int,i.split())[:-1] for i in inp[1:]]
答案 1 :(得分:-1)
到目前为止完成工作我认为看起来还不错。为什么不这样做:
If r[-1] == 0:
Del r[-1]
答案 2 :(得分:-1)
你不能这样做:
lin=[]
for line in sys.stdin:
lin.append([float(e) for e in line.split()[:-1]])
所以这就变成了一行:
lin=[[float(e) for e in line.split()[:-1]] for line in sys.stdin]
然后你的平均值变为:
avgs=[sum(e)/len(e) for e in lin]
>>> avgs
[105.625, 5058.857142857143, 895.1428571428571]