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

2024-05-18 15:47:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的文本文件;值以制表符分隔:

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 

这不管用,我希望能得到一些建议?你知道吗


Tags: infordatainfile制表符lastsumpear
1条回答
网友
1楼 · 发布于 2024-05-18 15:47:38

您没有显示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

我已经考虑到最后4个值都是零;在这一点上,您将被零除,并且您希望处理针对该情况抛出的异常。你知道吗

相关问题 更多 >

    热门问题