[英]How can I use sum in python for specific values in a list?
我有一个看起来像这样的文本文件; 值以制表符分隔:
diamond orange pear loc1 . + 0.0 0.0 0.0 0.0 1.0 1.2 3.4
diamond orange pear loc2 . + 1.0 0.0 0.0 0.0 1.0 1.2 2.3
diamond orange pear loc3 . + 2.0 0.0 3.0 0.0 0.0 0.0 1.4
# ......
对于文件中的每一行,我想将前3个值的总和除以后4个值的总和之比。 输出如下所示:
diamond orange pear loc1 . + 0
diamond orange pear loc2 . + 0.22
diamond orange pear loc3 . + 4.28
......
我想在python中做到这一点。
with open('/path/to/file/') as inFile:
inFile.next()
for line in inFile:
data = cols[6:]
data = map(float,data)
sum_3 = [sum[for x in x data[0:3]]
sum_last = [sum[for x in x data[4:7]]
average = sum_3/sum_last
这不起作用,我希望可以得到一些建议吗?
您没有显示cols
来源,但是看来您实际上并没有拆分每一行,在这种情况下,您剩下的只是一个字符串,并且您尝试使用该字符串的字符,而没有前6个字符。将单个字符映射到浮点值不会为您提供所需的数据。
接下来, sum()
是一个函数,但是您正在使用索引语法, sum[...]
将引发异常。 您也不需要使用列表推导从切片中获取值,只要sum(data[:3])
会做,只要切片产生一个float
序列即可。
您有一个制表符分隔的文件,使用csv
模块进行拆分可能是最简单的:
import csv
with open('/path/to/file/') as infile:
reader = csv.reader(infile, delimiter='\t')
next(reader) # skip first row
for row in reader:
first3, last = row[-7:-4], row[-4:]
try:
average = sum(map(float, first3)) / sum(map(float, last))
except ZeroDivisionError:
# last four values are all zero; just set the average to zero.
average = 0
我对最后四个值全部为零留有余量。 到那时,您将被零除,并且您想处理针对该情况引发的异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.