[英]Formatting the print of a path in 2d grid
我有一个2d网格和一个通过网格的路径,如下所示:
grid = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
path = [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)]
我想要的结果是一个格式很好的输出,描绘了显示路径的网格:
*1 2 3
*4 5 6
*7 *8 *9
作为Python新手,我不完全知道如何使用列表推导和字符串格式化。
这是我到目前为止:
def print_path(grid, path):
print('\n'.join(''.join(['{:4}'.format(val) for val in row]) for row in grid))
--- Output ---
1 2 3
4 5 6
7 8 9
我在路径中的特定元素之前获取星号的想法是将实际的网格元素映射到应该在结果中使用的字符串表示,因此:
1 => "*1"
2 => "2"
...
9 => "*9"
总的来说,Python的语法感觉压倒一切。 我想写的更像是Python-er而不是Java-er(我很满意)。 任何提示/提示/解决方案将不胜感激!
您可以使用嵌套列表推导和字典,以帮助您在索引位于路径中或选择空字符串时选择星形。
In [36]: choose = {True: '*', False:''}
In [37]: print('\n'.join([' '.join(["{}{}".format(choose[(ind, i) in path], j) for i, j in enumerate(sub)]) for ind, sub in enumerate(grid)]))
*1 2 3
*4 5 6
*7 *8 *9
#Here is the broken version for more readability:
#'\n'.join([' '.join(
# ["{}{}".format(choose[(ind, i) in path], j)
# for i, j in enumerate(sub)])
# for ind, sub in enumerate(grid)])
def grid_counter(grid, path):
for row, row_list in enumerate(grid):
for column, column_num in enumerate(row_list):
if (row, column) in path:
print("*"+str(column_num), end=" ")
else:
print(str(column_num), end=" ")
print("\n")
这是一个更长的版本。 你可以简单地使用它,并使用list comp。
和“不可读”的一个班轮
def print_path(grid, path):
print('\n'.join(
''.join(['{:4}'.format('*' * ((i,j) in path) + str(val))
for j, val in enumerate(row)])
for i, row in enumerate(grid)))
print_path(grid, path)
*1 2 3
*4 5 6
*7 *8 *9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.