使用Python3进行字符串格式化打印:有时只需从未打包的数组中打印*一部分*内容。

5
在我几分钟前的问题(链接)中,我询问如何在Python使用str.format方法打印存储在数组中的字符串。
答案很明显,需要先将列表展开为单独的元素,像这样:
# note that I had to play with the whitespace because the {} text is 2 characters, while its replacement is always one

hex_string = r'''
            _____
           /     \
          /       \
    ,----(    {}    )----.
   /      \       /      \
  /   {}    \_____/   {}    \
  \        /     \        /
   \      /       \      /
    )----(    {}    )----(
   /      \       /      \
  /        \_____/        \
  \   {}    /     \   {}    /
   \      /       \      /
    `----(    {}    )----'
          \       /
           \_____/
'''

letters = list('1234567')

print(hex_string.format(*letters))

但如果我希望始终将中心六边形内打印第一个数组项 letters[0],那么如何混合拆包数组并保留第一个数组元素的第4个打印字符串?

我可以尝试其他打印方法,比如 f-strings。

例如:

print(hex_string.format(letters[3], letters[1], letters[2], letters[0], letters[4], letters[5], letters[6]))

所以我的输出实际上应该像这样:
            _____
           /     \
          /       \
    ,----(    4    )----.
   /      \       /      \
  /   2    \_____/   3    \
  \        /     \        /
   \      /       \      /
    )----(    1    )----(
   /      \       /      \
  /        \_____/        \
  \   5    /     \   6    /
   \      /       \      /
    `----(    7    )----'
          \       /
           \_____/
3个回答

5

如果您事先知道所需的顺序:

letters = list('1234567')
reordering = [4,2,3,1,5,4,7]

你可以将此应用于信件:
new_letters = [letters[index-1] for index in reordering]

输出:

['4', '2', '3', '1', '5', '4', '7']

现在您可以创建格式化的字符串:
print(hex_string.format(*new_letters))

5
您可以使用 .format() 来尝试这样的操作:
a = '123'
print('{2}, {0}, {1}'.format(*a))

这会打印出3, 1, 2

采用此方法,你的初始hex_string将“自我记录”,其中来自你的数组的字母将精确放置。


1
我认为最简单的方法是将您的字母更改为list('4231567'),这样可以允许您混合拆包,并避免移动数组中的元素。
hex_string = r'''
            _____
           /     \
          /       \
    ,----(    {}    )----.
   /      \       /      \
  /   {}    \_____/   {}    \
  \        /     \        /
   \      /       \      /
    )----(    {}    )----(
   /      \       /      \
  /        \_____/        \
  \   {}    /     \   {}    /
   \      /       \      /
    `----(    {}    )----'
          \       /
           \_____/
'''

letters = list('4231547')

print(hex_string.format(*letters))

输出将会是:

            _____
           /     \
          /       \
    ,----(    4    )----.
   /      \       /      \
  /   2    \_____/   3    \
  \        /     \        /
   \      /       \      /
    )----(    1    )----(
   /      \       /      \
  /        \_____/        \
  \   5    /     \   6    /
   \      /       \      /
    `----(    7    )----'
          \       /
           \_____/


或者进一步扩展下面提出的想法,使用带有定义索引的str.format来解压原始字符串,但在不同位置分配不同的项。

hex_string = r'''
            _____
           /     \
          /       \
    ,----(    {3}    )----.
   /      \       /      \
  /   {1}    \_____/   {2}    \
  \        /     \        /
   \      /       \      /
    )----(    {0}    )----(
   /      \       /      \
  /        \_____/        \
  \   {4}    /     \   {5}    /
   \      /       \      /
    `----(    {6}    )----'
          \       /
           \_____/
'''

letters = list('1234567')

print(hex_string.format(*letters))

这也为您提供了更好的参考点,因为您知道{0}将包含列表的第一个项目,即1

输出将与上面相同


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接