Python - 从一系列嵌套列表中删除1个字符

时间:2016-10-16 00:07:01

标签: python list

我已经用下面的代码解决了这个问题,但是我试图理解一种更好的方法来删除每个数字字符串末尾的零,因为它们会抛弃计算。我的解决方案似乎很重,有没有更优雅的方法来解决这个问题而没有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))))),

赞赏任何其他批评和建设性批评。

3 个答案:

答案 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]