如何从1D字符串列表创建2D int列表

时间:2017-08-02 12:21:15

标签: python python-3.x

我有一个包含数字的文件,每行有20个数字,如下所示:

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00

该文件包含20行这样的行,我想读取该文件并将其转换为2D int列表。

我设法做到了这一点:

with open(file) as f:
    t = f.read()
    t = t.split()
    t = [t[i:i+20] for i in range(20)]

我得到的是2D字符串列表,但我希望它们是整数,以便使用算术运算。我尝试t = [int(t[i:i+20]) for i in range(20)],但自TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

以来不允许这样做

我怎么能实现这个目标?

3 个答案:

答案 0 :(得分:2)

我强烈建议您使用numpy代替它,它会更快

import numpy as np
t = np.genfromtxt(file, dtype='int32', delimiter=' ')

否则你可以将其视为

with open(file) as f:
    t = [[int(i) for i in line.split(' ')] for line in f]

答案 1 :(得分:1)

您需要将每个元素转换为int,例如使用另一个列表解析

t = [[int(ti) for ti in t[i:i+20]] for i in range(20)]

答案 2 :(得分:1)

这是另一种使用嵌套列表理解的方法。

with open(fname) as f:
    t = [[int(u) for u in row.split()] for row in f]

for row in t:
    print(row)

在Python 3的最新版本中,您也可以使用这种方式创建t,它更紧凑,可能更快:

t = [[*map(int, row.split())] for row in f]