使用 python3 的字符串格式打印:*有时*从解压缩的数组打印
String format printing with python3: print from unpacked array *some* of the time
在我的 中,我询问了当字符串存储在数组中时如何使用 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 )----'
\ /
\_____/
我认为最简单的方法是将您的字母更改为 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
输出与上面相同
你可以用 .format()
来尝试这样的事情:
a = '123'
print('{2}, {0}, {1}'.format(*a))
这将打印 3, 1, 2
通过这种方法,您的初始 hex_string
将 "self document" 您数组中的字母将准确地到达的位置。
如果您事先知道所需的顺序:
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))
在我的 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 )----'
\ /
\_____/
我认为最简单的方法是将您的字母更改为 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
输出与上面相同
你可以用 .format()
来尝试这样的事情:
a = '123'
print('{2}, {0}, {1}'.format(*a))
这将打印 3, 1, 2
通过这种方法,您的初始 hex_string
将 "self document" 您数组中的字母将准确地到达的位置。
如果您事先知道所需的顺序:
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))