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

时间:2016-12-16 00:07:24

标签: python python-3.x

传递此信息的最佳方法是什么:

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

1 个答案:

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