我有一个像这样的列表
[['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)
答案 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)