2016-12-16 14 views
1

什麼是傳遞最好的方法:最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

您可能希望用座標元組稍微重新定義您的示例,以便我們可以看到行和列的結尾位置。 –

回答

6

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