Python隐式嵌套for循环

时间:2015-08-25 16:45:41

标签: python

我想迭代从文件读取的每一行,拆分它们,然后将每个拆分元素转换为浮点数以创建一个浮动列表。

到目前为止,我有以下代码:

f = open('coordinates.dat')
contents = map(str.strip, f.readlines())
f.close()

对于contents中的每个元素(行),我想要line.split(),然后对line.split()中的每个元素,将它们转换为浮点数。是否可以使用隐式循环执行此操作?输出看起来像这样:

[[float1, float2, float3], [float4, float5, float6], ... , [floatX, floatY, floatZ]]

(文件的每一行有三个数字)

我尝试了以下内容:

a = [ line for line in contents for float(i) in line.split()]

给出了sytax错误:SyntaxError: can't assign to function call

3 个答案:

答案 0 :(得分:4)

重新排列您的尝试会生成正确的代码:

a = [[float(i) for i in line.split()] for line in contents]

答案 1 :(得分:3)

您可以使用嵌套列表解析:

a = [[float(i) for i in line.split()] for line in contents]

答案 2 :(得分:1)

如果你想使用map:

with open("coordinates.dat") as f:
    out = [list(map(float, sub)) for sub in map(str.split, f)]

或者:

with open("coordinates.dat") as f:
    out = [list(map(float, sub.split())) for sub in f]
    print(out)

或者考虑到你有数字数据numpy会很有用:

import numpy as np

arr = np.loadtxt("coordinates.dat")

您也不需要调用readlines或str.strip来转换为浮动。