我正在尝试阅读我创建的文本文件,如下所示:
small.txt
%%%%%%%%%%%%%%%%%%%%%%%
%eeeeeee%eeeee%eeeee%G%
%%%e%e%%%%%e%e%%%e%e%e%
%e%e%eeeeeee%eee%e%eee%
%e%e%e%e%%%e%%%e%e%%%e%
%eeeee%eee%eeeeeeeee%e%
%e%%%e%e%e%e%e%e%%%%%e%
%e%e%eee%e%e%eeeeeee%e%
%e%e%e%%%e%%%%%e%e%%%e%
%Pee%eeeeeeeee%e%eeeee%
%%%%%%%%%%%%%%%%%%%%%%%
我想在特定情况下创建一个2D数组board[21][11]
。
我希望每个char都在一个单元格中,因为我想实现BFS和其他算法来达到特定的路径,这是一种Pacman游戏。
这是我的代码:
f = open("small.txt", "r")
output_list = []
for rec in f:
chars = rec.split()
print chars
inner_list = []
for each in chars:
inner_list.append(each)
output_list.append(inner_list)
print output_list
如您所见,我现在得到的输出是[[%%%%%%%%%%%%%%%%%%%%%%%]]
答案 0 :(得分:2)
你可以这样做:
with open('small.txt') as f:
board = f.readlines()
file.readlines()
方法将返回一个字符串列表,您可以将其用作2D数组:
board[1][5]
>>> 'e'
请注意,使用此方法时,换行符('\n'
)将放在最后一个索引的每一行中。要摆脱它们,您可以使用str.rstrip
:
board = [row.rstrip('\n') for row in board]
答案 1 :(得分:1)
正如另一个答案所指出的那样,行字符串已经可以按整数索引,但是如果你真的想要一个列表列表:
array = [list(line.strip()) for line in f]
删除行结尾并将每个字符串转换为列表。
答案 2 :(得分:0)
您的代码存在一些问题:
split
将行拆分为字符列表,但这只会在空格处拆分chars
的最后一个值chars
中的每个(未分割的)行(由于前一个问题只是最后一个)包装成一个列表相反,您只需将str
转换为list
...
>>> list("abcde")
['a', 'b', 'c', 'd', 'e']
...并直接将这些内容放入output_list
。另外,请勿忘记strip
{/ 1}} \n
:
f = open("small.txt", "r")
output_list = []
for rec in f:
chars = list(rec.strip())
output_list.append(chars)
或使用with
进行自动关闭和列表理解:
with open("small.txt") as f:
output_list = [list(line.strip()) for line in f]
但是,请注意,您不希望更改该网格中的值,您根本不必转换为字符列表列表;字符串列表也可以正常工作。
output_list = list(map(str.strip, f))