嵌套列表并转换为浮动

我试图从文本文件中读取一些数字并将它们转换为浮点列表,但我尝试的任何东西似乎都没问题。

这是我的代码现在:

python_data = open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r')
python_lengths = []
for line in python_data:
    python_lengths.append(line.split())
python_lengths.sort()

print python_lengths

它返回:

[['12.2'], ['26'], ['34.2'], ['5.0'], ['62'], ['62'], ['62.6']]

(包括所有括号)

但我不能用任何常规命令将它转换为浮点列表,如下所示:

python_lengths = float(python_lengths)

要么:

float_lengths = [map(float, x) for x in python_lengths]

因为它似乎是嵌套或什么的?

0
额外 编辑
意见: 1

3 答案

def floats_from_file(f):
    for line in f:
        for word in line.split():
            yield float(word)

with open('C:/Documents and Settings/redacted/Desktop/python_lengths.txt') as f:
    python_lengths = list(floats_from_file(f))

python_lengths.sort()

print python_lengths

请注意,即使在Windows上,也可以使用正斜杠。如果你想使用反斜杠,你应该使用“原始”字符串,以避免问题。什么样的问题?那么,有些字符是反斜线特殊的;例如, \ n 代表换行符。如果你只用一个简单的引号放置一个路径,并且其中一个目录名以 n 开头,那么你将在那里得到一个换行符。解决方案是将反斜杠加倍,使用原始字符串或仅使用正斜杠。

0
额外

@ eumiro的答案是正确的,但这里有其他的东西可以帮助:

numbers = []
with open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r') as f:
   for line in f.readlines():
      numbers.extend(line.split())

numbers.sort()
print numbers
0
额外

发生这种情况是因为即使只有1个元素, .split()总是返回一个项目列表。如果将 python_lengths.append(line.split())更改为 python_lengths.extend(line.split()),您将获得您期望的平面列表。

0
额外
/线。非常感谢你,你不知道!在过去的4个小时里,这个单词一直阻止我完成这个程序-_-
额外 作者 user1367212,