最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循环将不起作用。

+0

您可能希望用坐标元组稍微重新定义您的示例,以便我们可以看到行和列的结尾位置。 –

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