我在文件中有一个数字矩阵(城市之间的距离用于解决TSP)。我把它加载到一个列表中。之后,我列表中的每一行都是这样的:
' 9999 3 5 48 48 8 8 5 5 3 3 0 3 5 8 8 5\n'
每行之间的数字空格数可能不同。现在我只想将其转换为整数/浮点数列表。我得到了一个循环:
matrix = []
for row in lines[begin:end]:
matrix.append([float(x) for x in row.split()])
它运作得很好。我只是好奇我是否可以在这里使用一个生成器(就像我在循环中使用它),但不是在循环中,而是在一行中。我尝试了类似[float(x) for x in [y.split() for y in lines[begin:end]]]
的内容,但它说:
float() argument must be a string or a number, not 'list'
所以可以像在一行中那样解决,还是应该把它留在循环中?
答案 0 :(得分:5)
您可以使用以下列表理解
matrix = [[float(i) for i in row.split()] for row in lines]
但对于这种特殊情况,使用numpy.genfromtxt
import numpy as np
matrix = np.genfromtxt('your_file', delimeter=' ')
答案 1 :(得分:1)
当然可以。
my_list = [' 9999 3 5 48 48 8 8 5 5 3 3 0 3 5 8 8 5\n',
' 3 12 5 48 48 8 8 5 5 3 3 0 3 5 8 8 5\n']
gen = (list(map(float, f.split())) for f in my_list)
您现在可以遍历gen
。
例如:
for i in gen:
print(i)
[9999.0, 3.0, 5.0, 48.0, 48.0, 8.0, ...]
[3.0, 12.0, 5.0, 48.0, 48.0, 8.0, ...]
我假设generator
你实际上是generator
,而不是list-comprehension
。如果情况并非如此,那么@Cody的回答就是你要做的。