Skip to main content
 首页 » 编程设计

python之大多数 pythonic 可能会将嵌套列表传递给格式化

2025年05月04日16mayingbao

传递这个的最好方法是什么:

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 ║ 
    ╚═══╩═══╩═══╩═══╩═══╩═══╩═══╝