最Python的5月通过嵌套列表转换成格式化
问题描述:
什么是传递最好的方法:最Python的5月通过嵌套列表转换成格式化
board = [['X','o','o','o','o','X'],
['X','o','o','_','_','X'],
['X','o','o','_','_','X'],
['X','o','o','o','X','X'],
['X','o','o','o','X','X'],
['X','o','o','_','X','X'],
['_','o','o','o','X','X']]
到这一点:
"""
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║ {} ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╝
"""
带格式?注意:列表是基于板定义的垂直列表,因此简单的for循环将不起作用。
答
假设board
是板和fmt
是格式字符串,与*
解压您使用您喜欢的任何方法中,压平之后,例如发电机表达式:
>>> print(fmt.format(*(item for row in board for item in row)))
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║ X ║ o ║ o ║ o ║ o ║ X ║ X ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ o ║ _ ║ _ ║ X ║ X ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ _ ║ _ ║ X ║ X ║ o ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ X ║ X ║ X ║ o ║ o ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ X ║ X ║ X ║ o ║ o ║ _ ║ X ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ X ║ _ ║ o ║ o ║ o ║ X ║ X ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╝
或者itertools.chain.from_iterable
:
>>> import itertools
>>> print(fmt.format(*itertools.chain.from_iterable(board)))
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║ X ║ o ║ o ║ o ║ o ║ X ║ X ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ o ║ _ ║ _ ║ X ║ X ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ _ ║ _ ║ X ║ X ║ o ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ X ║ X ║ X ║ o ║ o ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ X ║ X ║ X ║ o ║ o ║ _ ║ X ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ X ║ _ ║ o ║ o ║ o ║ X ║ X ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╝
或者您可以使用普通的itertools.chain
并将board
与*
首先拆开包装:
>>> import itertools
>>> print(fmt.format(*itertools.chain(*board)))
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╗
║ X ║ o ║ o ║ o ║ o ║ X ║ X ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ o ║ _ ║ _ ║ X ║ X ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ _ ║ _ ║ X ║ X ║ o ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ o ║ X ║ X ║ X ║ o ║ o ║ o ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ X ║ X ║ X ║ o ║ o ║ _ ║ X ║
╠═══╬═══╬═══╬═══╬═══╬═══╬═══╣
║ X ║ _ ║ o ║ o ║ o ║ X ║ X ║
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╝
您可能希望用坐标元组稍微重新定义您的示例,以便我们可以看到行和列的结尾位置。 –