一行中的Python 2d列表生成器

min*_*234 1 python generator

我在文件中有一个数字矩阵(用于解决TSP的城市之间的距离)。我将其加载到列表中。之后,列表中的每一行如下所示:

' 9999    3    5   48   48    8    8    5    5    3    3    0    3    5    8    8    5\n'
Run Code Online (Sandbox Code Playgroud)

每行上数字之间的空格数可能不同。现在,我只想将其转换为整数/浮点数列表。我有一个循环:

matrix = []
for row in lines[begin:end]:
    matrix.append([float(x) for x in row.split()])
Run Code Online (Sandbox Code Playgroud)

它工作正常。我很好奇我是否可以在这里使用生成器(就像我在循环中使用它),但不是在循环中,而是在一行中。我尝试了类似的方法[float(x) for x in [y.split() for y in lines[begin:end]]],但是它说:

float() argument must be a string or a number, not 'list'
Run Code Online (Sandbox Code Playgroud)

那么它可以像一行一样解决吗,还是应该让它循环处理?

Cor*_*mer 5

您可以使用以下列表理解

matrix = [[float(i) for i in row.split()] for row in lines]
Run Code Online (Sandbox Code Playgroud)

但是对于这种特殊情况,使用起来会更快 numpy.genfromtxt

import numpy as np
matrix = np.genfromtxt('your_file', delimeter=' ')
Run Code Online (Sandbox Code Playgroud)

  • 有一个参数[`skip_header`](https://docs.scipy.org/doc/numpy-1.13.0/reference/generation/numpy.genfromtxt.html),在开始时跳过N行 (2认同)
  • @Frynio这是一个不同的问题。 (2认同)