簡體   English   中英

如何在列表中使用字符串格式?

[英]How to use string formatting within a list?

是否可以在列表中使用字符串格式化方法?

例如

list1 = ["{0:^8}", "{1:^8}", "{2:^8}".format(7, 8, 9)]

但是每當我嘗試運行它時,它都會給出輸出,因為它只更改了最后一個。

['{0:^8}', '{1:^8}', '   9    ']

如何格式化完整列表?

您只是格式化最后一個字符串。 您只需要遍歷數字,並且由於所有數字的格式規范都相同,因此您可以重復使用它*。

>>> ['{:^8}'.format(x) for x in (7, 8, 9)]
['   7    ', '   8    ', '   9    ']

* 與每個不同的規范相反,您可以使用zip ,例如

[spec.format(x) for spec, x in zip(specs, numbers)]

您只是在列表中的一個字符串上調用str.format 你的代碼工作正常,不是按照你想要的方式,而是按照你編碼的方式。

所以實際上只有兩種明確的方法可以做到這一點。

您的值為7, 8, 9讓我們將它們存儲到一個變量中。 然后我們可以對它們使用 map 到數據,我們暗示是每個字符串的格式:

>>> vals = 7, 8, 9
>>> data = ["{:^8}", "{:^8}", "{:^8}"]
>>> list(map(str.format, data, vals))
['   7    ', '   8    ', '   9    ']

或者使用f-string而不先暗示data ,因為每個值的所有格式都是相同的:

>>> vals = 7, 8, 9
>>> [f'{v:^8}' for v in vals]

對於替代方案,我想您也可以在列表理解中使用str.format ,但這不像f-string s 那樣干凈或花哨:

>>> vals = 7, 8, 9
>>> ['{:^8}'.format(v) for v in vals]

format函數只對一個字符串起作用。 因此,如果您有多個字符串,那么您需要通過循環或單獨對每個字符串調用 format 方法。 "{} {} {}".format(7,8,9)是一個完整的字符串,但"","","{}".format(7,8,9)將最后一個值應用於最后一個字符串中的占位符,因為它只被調用。

您可以使用帶有列表理解的f-strings來獲得輸出 -

output = [f'{i:^8}' for i in [7, 8, 9]]
print(output)

在您的代碼中, .format用於最后一個元素,因此只會對其進行格式化。

但是,在這里,所有項目都被格式化,然后添加到列表中。

這是一個簡單的修復。 您希望單獨格式化所有元素,這需要單獨的格式調用。 實際上,您希望將字符串元素作為它們自己的元素在列表中使用逗號分隔在引號中的每個項目。 這種方式可以對每個項目進行格式化。

# You need to adjust your string quotations like this
list1=["{0:^8},{1:^8},{2:^8}".format(7,8,9)]

# Check the results of the adjustment
for item in list1:
    print(item)

list1=["{0:^8}","{1:^8}","{2:^8}"]    #Insert special characters into a string
str1='|'.join(list1)
list2=str1.format(7,8,9).split('|')
print(list2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM