繁体   English   中英

如何在python中将sum用于列表中的特定值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM