TypeError:需要一个float,Python

时间:2016-03-29 12:20:05

标签: python list

我想将浮点数列表转换为整数。 我的代码

import math

data1 = [line.strip() for line in open("/home/milenko/Distr70_linux/Projects/Tutorial_Ex3/myex/base.txt", 'r')]
print type(data1)
data1c = [int(math.floor(i)) for i in data1]

print data1c[0]

我应该改变什么? 文件很大,只有几行

1.200000e+03
1.200000e+03
1.200000e+03
1.200000e+03
1.200000e+03
1.200000e+03
1.200000e+03
1.200000e+03

2 个答案:

答案 0 :(得分:6)

你需要先施展才能浮动:

[int(float(i)) for i in data1]

调用int会为您编号:

In [8]: int(float("1.23456e+03"))
Out[8]: 1234

您可以在文件逻辑中完成所有操作:

with open("/home/milenko/Distr70_linux/Projects/Tutorial_Ex3/myex/base.txt", 'r') as f:
   floored = [int(float(line)) for line in f]

最好使用with打开文件,它会为您处理文件的关闭。此外, int float 可以处理前导或尾随空格,因此您不必担心使用条带。

此外,如果你只是想拉动浮动而不是底层,map是从文件或任何可迭代创建浮点数,整数等列表的好方法:

 floored = list(map(float, f))

或者使用python3,map返回迭代器,你可以双映射:

floored = list(map(int, map(float, f)))

python2中的等效代码将使用itertools.imap

from itertools import imap

floored = map(int, imap(float, f))

答案 1 :(得分:2)

从文件读取的数据始终为str类型,其中math.floor所需的参数为浮点数

所以你需要将它转换为float

data1c = [int(float(i)) for i in data1]