总结浮点数列表(Python)

时间:2014-10-23 01:57:27

标签: python

输入文件采用以下格式:

Britany     6.06 5.31 4.34 8.60 4.14 3.12 3.53 5.16
Eula        6.46 9.84 7.17 4.89 6.24 8.82 4.31 9.08
Georgianna  0.52 6.95 6.67 5.54 8.27 0.57 8.42 2.76
Serina      3.07 9.22 3.59 0.89 3.91 9.79 6.48 7.81

到目前为止,这是我的代码:

empty={}
floatList=[]
infile= open(userOutputFile,'r',encoding='UTF8')
for line2 in infile:
    tempList2= line2.split()[1:]
    tempList2.remove(max(tempList2))
    tempList2.remove(min(tempList2))
for i in tempList2:
    tempList2 = float(i)
    floatList.append(tempList2)

我尝试做的是将文件行拆分为字符串列表,然后删除最大值和最小值。这似乎是有效的,但是,当我尝试计算每一行的总和,然后将该总数分配给一个字典,其中相应的名称作为键,值作为总计时,我遇到了问题。基本上字典会读取像Britany(原始文件中的键)之类的东西:43.01(计算总数)。

4 个答案:

答案 0 :(得分:1)

Pandas对此有好处:

In [23]: import pandas as pd

In [24]: df = pd.read_table('t.txt', header=None, delimiter=' \w')

In [25]: df.sum(axis=1)
Out[25]:
0    2.26
1    3.81
2    4.70
3    4.76
dtype: float64

In [28]: dict(zip(df[0], df.sum(axis=1)))
Out[28]:
{'Britany    ': 2.2600000000000007,
 'Eula       ': 3.8099999999999996,
 'Georgianna ': 4.7000000000000002,
 'Serina     ': 4.7599999999999998}

In [29]: df.min(axis=1)
Out[29]:
0    0.06
1    0.08
2    0.27
3    0.07
dtype: float64

答案 1 :(得分:0)

立即引起注意的一点是,您将实际迭代中的值与总和相加,并每次重新定义列表。

例如:

empty={}
floatList=[]
infile= open(userOutputFile,'r',encoding='UTF8')
for line2 in infile:
    tempList2= line2.split()[1:]
    tempList2.remove(max(tempList2))
    tempList2.remove(min(tempList2))
print tempList2

我得到['3.07','9.22','3.59','3.91','6.48','7.81'],它们只是最后一行的中间值。

所以你应该做类似以下的事情:

empty={}
infile= open(userOutputFile,'r').readlines()
for line2 in infile:
    name = line2.split()[0]    #Sets the name to be the initial value
    tempList2= line2.split()[1:]
    tempList2.remove(max(tempList2))
    tempList2.remove(min(tempList2))

    sum = 0

    for i in tempList2:
        i_val = float(i)
        sum += i_val      #Sums iteratively over each value in tempList2

    empty[name] = sum

现在做:

  
    
      

空           {'Georgianna':30.759999999999998,'Serina':34.08,'Eula':42.66,'Britany':28.54}

    
  

相同的迭代对值进行求和,并将它们附加到名称下的字典中。

答案 2 :(得分:0)

一些注意事项:

  • 您应该在消除最小值和最大值之前将事物转换为浮动。您现在正在进行字符串比较,在这种情况下"10.0" < "2.00"True
  • Python有一个sum函数,可以为您汇总列表中的所有数字。
  • 一些dict / list comprehensions将大大简化事情。

这就是我提出的:

infile = open(userOutputFile,'r',encoding='UTF8')
lines = ( line.split() for line in infile )
result = { xs[0]: sum(sorted(map(float, xs[1:]))[1:-1]) for xs in lines }

sum(sorted(map(float, xs[1:]))[1:-1])部分可能有点难以包围。从内到外,这就是它的作用:

  1. 抓住线上的所有数字(除第1个条目外的所有内容)
  2. 转换数字&#39;字符串表示浮动
  3. 对生成的浮动进行排序
  4. 抓住除了第一个和最后一个之外的所有内容(自分类以来的最小值和最大值)
  5. 总结一下

答案 3 :(得分:0)

f = open('input.txt', 'r')
d = f.read()
answers={}
for line in d.split("\n"):
    if len(line) > 0:
        line = line.split()
        #print(line)
        floats = [float(x) for x in line[1:]]
        floats.remove(max(floats))
        floats.remove(min(floats))
        name = line[0]
        x = sum(floats)
        #print(x)
        answers[name] = x

print(answers)

提供以下输出:

{'Eula': 42.66, 'Georgianna': 30.759999999999998, 'Britany': 28.54, 'Serina': 34.08}