有条件地从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))