嵌套列表并转换为浮点数

时间:2012-05-24 07:13:13

标签: python list floating-point nested-lists

我正在尝试从文本文件中读取一些数字并将它们转换为浮点数列表,但我尝试的任何数据似乎都无法正常工作。

这是我现在的代码:

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]

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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

答案 2 :(得分:0)

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开头,那么您将在那里获得换行符。解决方案是将反斜杠加倍,使用原始字符串,或者只使用正斜杠。