0

可能重复:
如何使用现有列表制作二维数组?

我有一个文本文件'mapview.txt',它的内容是:

1234
5678
9012

我希望结果是:

[[1,2,3,4],[5,6,7,8],[9,0,1,2,]]

我不想要这样的:

[['1','2','3','4'],['5','6','7','8'],['9','0','1','2']]

我有这样的代码:

getit = open('./mapview.txt')
readit = getit.read()

itsline = readit.split()
line0 = list(itsline[0])
line1 = list(itsline[1])
line2 = list(itsline[2])

final = [line0,line1,line2]

print final

但结果是

[['1','2','3','4'],['5','6','7','8'],['9','0','1','2']]

我怎样才能得到

[[1,2,3,4],[5,6,7,8],[9,0,1,2,]]

? 我需要这种形式,因为我将使用数组中的整数。

有什么建议么?任何帮助都会很棒。

提前致谢!

4

3 回答 3

2

您可以将列表中的所有字符串更改为整数:

map(int, lst)

(该map函数将函数应用于列表的每个项目,该int函数将字符串转换为列表)。在您的情况下,您需要更改列表列表中的所有字符串,因此您需要类似

[map(int, lst) for lst in final]

关于您的代码要注意的另一件事是

line0 = list(itsline[0])
line1 = list(itsline[1])
line2 = list(itsline[2])

这不是一个好主意 - 它仅在您的文件中有 3 行时才有效。这也可以通过以下方式改进:

final = map(list, itsline)
于 2012-10-07T14:32:26.173 回答
2

要修改您的解决方案,请更改

line0 = list(itsline[0])
line1 = list(itsline[1])
line2 = list(itsline[2])

line0 = [int(i) for i in itsline[0]]
line1 = [int(i) for i in itsline[1]]
line2 = [int(i) for i in itsline[2]]

但是这个列表理解会更有效:

[[int(i) for i in line.strip()] for line in open('file/path')]
于 2012-10-07T14:33:13.207 回答
2
with open('./mapview.txt') as file:
     array2d = [[int(digit) for digit in line.strip()] for line in file]

print(array2d)

输出

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 0, 1, 2]]
于 2012-10-07T14:43:49.030 回答