我有当前的字符串:
output = "S.##......\n#.##..###.\n#.###.###.\n#.....###.\n###.#####S"
我想将其转换为以下列表:
coordinates = [['S', '.', '#', '#', '.', '.', '.', '.', '.', '.'],
['#', '.', '#', '#', '.', '.', '#', '#', '#', '.'],
['#', '.', '#', '#', '#', '.', '#', '#', '#', '.'],
['#', '.', '.', '.', '.', '.', '#', '#', '#', '.'],
['#', '#', '#', '.', '#', '#', '#', '#', '#', 'S']]
基本上每次我得到一个" \ n"我希望它之前的序列像上面一样被拆分并放入一个单独的列表项中。 我尝试了以下方法:
coordinates = []
temp = []
for item in output:
if item != "\n":
temp += item
else:
coordinates += temp
但它不起作用,也不适用于
.append()
答案 0 :(得分:5)
使用str.splitlines()
在换行符上拆分(以避免产生空的最后一行),然后在每个结果字符串上调用list()
。您可以使用list comprehension:
[list(line) for line in output.splitlines()]
在字符串上调用list()
会创建单个字符的列表对象:
>>> list('foo')
['f', 'o', 'o']
演示:
>>> from pprint import pprint
>>> output = "S.##......\n#.##..###.\n#.###.###.\n#.....###.\n###.#####S"
>>> [list(line) for line in output.splitlines()]
[['S', '.', '#', '#', '.', '.', '.', '.', '.', '.'], ['#', '.', '#', '#', '.', '.', '#', '#', '#', '.'], ['#', '.', '#', '#', '#', '.', '#', '#', '#', '.'], ['#', '.', '.', '.', '.', '.', '#', '#', '#', '.'], ['#', '#', '#', '.', '#', '#', '#', '#', '#', 'S']]
>>> pprint(_)
[['S', '.', '#', '#', '.', '.', '.', '.', '.', '.'],
['#', '.', '#', '#', '.', '.', '#', '#', '#', '.'],
['#', '.', '#', '#', '#', '.', '#', '#', '#', '.'],
['#', '.', '.', '.', '.', '.', '#', '#', '#', '.'],
['#', '#', '#', '.', '#', '#', '#', '#', '#', 'S']]
您的尝试失败,因为您从未重置temp
;每次到达\n
时,您都需要创建一个新的空列表,并使用coordinates.append()
代替+=
(与{相同} {1}}:
coordinates.extend()
您需要最后两行不要错过最后一个coordinates = []
temp = []
for item in output:
if item != "\n":
temp += item
else:
coordinates.append(temp)
temp = []
if temp:
coordinates.append(temp)
字符后的最后一行。
答案 1 :(得分:3)
您可以使用列表推导来生成\n
分隔符之间的每个字符列表:
>>> [list(x) for x in output.split('\n')]
[['S', '.', '#', '#', '.', '.', '.', '.', '.', '.'],
['#', '.', '#', '#', '.', '.', '#', '#', '#', '.'],
['#', '.', '#', '#', '#', '.', '#', '#', '#', '.'],
['#', '.', '.', '.', '.', '.', '#', '#', '#', '.'],
['#', '#', '#', '.', '#', '#', '#', '#', '#', 'S']]
将字符串x
传递给list
会返回x
中的字符列表。 output.split('\n')
是将字符串output
分解为由换行符\n
分隔的字符串列表的一种方法。
编辑:@MartijnPieters撰写的答案强调了在\n
(我承认我不知道)上分裂叮咬的重要一点。
如果您的字符串有一个尾随\n
,最好使用output.splitlines()
来分割字符串。在这里,使用split('\n')
会在最终\n
之后返回一个空字符串,而splitlines()
会在默认情况下避免这种情况。
答案 2 :(得分:2)
您可以在换行符split
上'\n'
然后转换为列表。
output = "S.##......\n#.##..###.\n#.###.###.\n#.....###.\n###.#####S"
coordinates = [list(s) for s in output.split('\n')]
>>> coordinates
[['S', '.', '#', '#', '.', '.', '.', '.', '.', '.'],
['#', '.', '#', '#', '.', '.', '#', '#', '#', '.'],
['#', '.', '#', '#', '#', '.', '#', '#', '#', '.'],
['#', '.', '.', '.', '.', '.', '#', '#', '#', '.'],
['#', '#', '#', '.', '#', '#', '#', '#', '#', 'S']]
答案 3 :(得分:1)
这应该有效:
output = "S.##......\n#.##..###.\n#.###.###.\n#.....###.\n###.#####S"
items = output.split('\n')
final_list = []
for item in items:
line_list = [c for c in item]
final_list.append(line_list)
print final_list