python - 如何在 python 中将 sum 用于列表中的特定值?
问题描述
我有一个看起来像这样的文本文件;这些值是制表符分隔的:
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
s 序列即可。
您有一个制表符分隔的文件,使用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 个值都为零;那时你会被零除,你会想要处理为这种情况引发的异常。
推荐阅读
- c# - 有没有办法从另一个项目中获取一个类的实例?
- ruby - 如何在 Ruby 的“坚固”gem 中获取 git 存储库的默认分支?
- utf-8 - 当数组包含 UTF-8 字符时,CodeCeption assertContains 失败
- angular - 将 Angular 从 4 升级到 6 时使用 angular2-jwt 和 AuthHttp 的问题
- latex - Latex BibTex 找不到数据库条目
- visual-studio - SQL Server 是否使用 Windows 身份验证从 Azure 连接到 Visual Studio?
- c++ - 如何创建 Gdk::Pixbuf 实例的 std::map 并在 Gdk::Cairo 中使用它
- php - 如何从 sql 数据库中删除两个不同数据相等的行?
- leaflet - 不添加带有传单地图和 L.Routing.control 的添加 css 的自定义标记
- datetime - 在给定时间之间创建随机分钟日期