有条件地从python列表中提取数字
我有一个数字列表,比如有条件地从python列表中提取数字,python,numpy,Python,Numpy,我有一个数字列表,比如 20 40 45 60 80 我想说的是,例如,小于50的数字之间的平均距离是12.5 import numpy as np from sys import argv script, pos_file, output = argv positions = [] with open(pos_file) as f: for x in f: assert x.strip().split() positions.append(x) po
20
40
45
60
80
我想说的是,例如,小于50的数字之间的平均距离是12.5
import numpy as np
from sys import argv
script, pos_file, output = argv
positions = []
with open(pos_file) as f:
for x in f:
assert x.strip().split()
positions.append(x)
position_list= []
for x in positions:
if x < 50:
position_list.append(x)
print np.mean[position_list]
您的代码有几处错误:
- 您不会将它们转换为
或int
李>float
- 您使用
而不是np.mean[…]
和np.mean(…)
不可编写脚本np.mean
import numpy as np
from sys import argv
script, pos_file, output = argv
positions = []
with open(pos_file) as f:
for x in f:
assert x.strip().split()
positions.append(int(x))
position_list= [x for x in positions if x < 50]
print np.mean(position_list)
将numpy导入为np
从系统导入argv
脚本,pos_文件,输出=argv
职位=[]
打开(pos_文件)作为f:
对于f中的x:
断言x.strip().split()
位置。附加(int(x))
位置列表=[x小于50时,x代表x的位置]
打印np.平均值(位置列表)
编辑
但是,根据您的评论,您似乎提供了一个逗号分隔的列表:
import numpy as np
from sys import argv
script, pos_file, output = argv
positions = []
with open(pos_file) as f:
for x in f:
positions += (int(i) for i in x.strip().split())
position_list= [x for x in positions if x < 50]
print np.mean(position_list)
将numpy导入为np
从系统导入argv
脚本,pos_文件,输出=argv
职位=[]
打开(pos_文件)作为f:
对于f中的x:
位置+=(x.strip().split()中i的int(i)
位置列表=[x小于50时,x代表x的位置]
打印np.平均值(位置列表)
或:
将numpy导入为np
从系统导入argv
脚本,pos_文件,输出=argv
职位=[]
打开(pos_文件)作为f:
对于f中的x:
对于x.strip().split()中的i:
位置.附加(int(i))
位置列表=[x小于50时,x代表x的位置]
打印np.平均值(位置列表)
正如@Jean Françoisfare所说,你也可以使用总和除以项目数,因此:
from sys import argv
script, pos_file, output = argv
positions = []
with open(pos_file) as f:
for x in f:
for i in x.strip().split():
positions.append(int(i))
position_list= [x for x in positions if x < 50]
print sum(position_list)/len(position_list)
从系统导入argv
脚本,pos_文件,输出=argv
职位=[]
打开(pos_文件)作为f:
对于f中的x:
对于x.strip().split()中的i:
位置.附加(int(i))
位置列表=[x小于50时,x代表x的位置]
打印总和(位置列表)/长度(位置列表)
在这种情况下,您不必导入。您的代码中有一些错误,其他答案指出了这一点,但我觉得我应该以更干净的方式为您重新编写:
with open(pos_file) as f:
positions = [int(x) for line in f for x in line.strip().split(',') if int(x) < 50]
print(sum(positions)/len(positions))
我不会只用
numpy
来计算平均值。只需做sum(position\u list)/len(position\u list)
您不需要任何额外的模块。assert x.strip().split()有什么用?(除了防止仅在列表中读取位置
)
from sys import argv
script, pos_file, output = argv
positions = []
with open(pos_file) as f:
for x in f:
for i in x.strip().split():
positions.append(int(i))
position_list= [x for x in positions if x < 50]
print sum(position_list)/len(position_list)
with open(pos_file) as f:
positions = [int(x) for line in f for x in line.strip().split(',') if int(x) < 50]
print(sum(positions)/len(positions))
import csv
with open(pos_file) as f:
cr = csv.reader(f)
positions = [int(x) for row in cr for x in row if int(x) < 50]
print(sum(positions)/len(positions))