从文本文件中获取整数列表并返回min,max和avg的函数

时间:2016-02-10 10:15:10

标签: python list

我有一个像这样的列表

[['min: 1', '2', '3', '5', '6\n'], 
['max: 1', '2', '3', '5', '6\n'], 
['avg: 1', '2', '3', '5', '6']]

在文本文件上。

我想计算最小值,最大值和平均值,但我在列表中删除min,max和avg时遇到问题。

infile = open('input.txt', 'r+')
lisnum = []
for line in infile:
    listnum.append(line.split(','))
for i in listnum:
    print i
infile.close()

def minimum(mi):
    min_value = min(mi)
    return min_value

def maximum(ma):
    max_value = max(ma)
    return max_value

def average(avg):
    sum = 0
    for x in av:
        sum+=x
    return(sum/len(av))

print listnum
a = [i.split(':')[0] for i in listnum]
print a
print minimum(listnum)
print maximum(listnum)
print average(listnum)

1 个答案:

答案 0 :(得分:1)

似乎您在非CSV文件(逗号分隔值)的内容上使用split(',')。您可以单独处理列表中的第一个值,使用split(':')[1]获取:之后的部分,但我建议使用regular expressions来获取列表中的所有数字:< / p>

>>> line = 'max: 1,2,3,5,6\n'
>>> re.findall('\d+', line)
['1', '2', '3', '5', '6']
>>> nums = [int(x) for x in re.findall('\d+', line)]
>>> min(nums)
1

此外,您似乎将您的功能应用于整个列表列表,而不仅仅是相应的行。例如,获得&#34; max&#34;的max。 ,使用print maximum(listnum[1])

好像你仍然遇到这个问题。正如我所说,您无法按,拆分整个列表,因为整个列表未被,分隔。您可以使用正则表达式同时获取操作和数字,也可以首先:分割然后按<{1>}分割。试试这个:

,

输出:

operations = {"sum": sum, "min": min, "max": max,
              "avg": lambda lst: float(sum(lst))/len(lst)}

with open("input.txt") as f:
    for line in f:
        op, numbers = line.split(":")
        op = op.strip().lower()
        numbers = [float(n) for n in numbers.split(",")]
        if op in operations:
            print("%s of %r is %f" % (op, numbers, operations[op](numbers)))
        else:
            print("Don't know how to do %s" % op)