簡體   English   中英

如何使用列表(或元組)作為字符串格式值

[英]How to use list (or tuple) as String Formatting value

假設這個變量:

s=['Python', 'rocks']
x = '%s %s' % (s[0], s[1])

現在我想替換更長的列表,並分別添加所有列表值,例如 s[0]、s[1]、... s[n],似乎不正確

引用自文檔:

給定格式 % 值...如果格式需要單個參數,則值可能是單個非元組對象。 [4] 否則,values 必須是一個元組,其中的項目數與格式字符串指定的數量完全相同,或者是單個映射對象(例如,字典)。

我用元組和列表作為格式化程序嘗試了很多組合但沒有成功,所以我想在這里問

我希望很清楚

[編輯] 好吧,也許我不夠清楚

我有大文本變量,比如

s = ['a', 'b', ..., 'z']

x = """some text block
          %s
          onother text block
          %s
          ... end so on...
          """ % (s[0], s[1], ... , s[26])

我想更緊湊地更改% (s[0], s[1], ... , s[26])而不手動輸入每個值

您不必拼出所有索引:

s = ['language', 'Python', 'rocks']
some_text = "There is a %s called %s which %s."
x = some_text % tuple(s)

當然,s 中的項數必須與格式字符串中的插入點數相同。

從 2.6 開始,您還可以使用新的format方法,例如:

x = '{} {}'.format(*s)

建立在@yan 對較新 .format 方法的回答上,如果一個字典的鍵值超過一個,請使用帶鍵的索引來訪問不同的值。

>>> s = {'first':['python','really'], 'second':'rocks'}
>>> x = '{first[0]} --{first[1]}-- {second}'.format(**s)
>>> x
'python --really-- rocks'

注意:當您必須根據獨立於 .format() 的鍵訪問其中一個值時,它幾乎沒有什么不同,如下所示:

>>> value=s['first'][i]

有如何加入元組成員:

x = " ".join(YourTuple)

空格是你的元組成員分隔符

如果你想使用一個項目列表,你可以直接傳遞一個元組:

s = ['Python', 'rocks']
x = '%s %s' % tuple(s)

或者您可以使用字典提前列出您的列表:

s = {'first':'python', 'second':'rocks'}
x = '%(first)s %(second)s' % s

話不多說,給你看代碼:

>>> tup = (10, 20, 30)
>>> lis = [100, 200, 300]
>>> num = 50
>>> print '%d      %s'%(i,tup)
50      (10, 20, 30)
>>> print '%d      %s'%(i,lis)
50      [100, 200, 300]
>>> print '%s'%(tup,)
(10, 20, 30)
>>> print '%s'%(lis,)
[100, 200, 300]
>>> 

如果您真的想在格式中注入多達 26 個字符串,您可能需要考慮命名占位符。 否則,查看您代碼的人將不知道s[17]是什么。

fields = {
    'username': 'Ghostly',
    'website': 'Stack Overflow',
    'reputation': 6129,
}

fmt = '''
Welcome back to {website}, {username}!
Your current reputation sits at {reputation}.
'''

output = fmt.format(**fields)

可以肯定的是,您可以繼續使用列表並像Jochen Ritzel 的答案一樣擴展它但是對於更大的結構來說這更難維護。 我只能想象使用 26 個{}占位符會是什么樣子。

fields = [
    'Ghostly',
    'Stack Overflow',
    6129,
]

fmt = '''
Welcome back to {}, {}!
Your current reputation sits at {}.
'''

output = fmt.format(*fields)

我們可以使用帶有列表名稱的*list轉換為.format(...)參數。 像這樣: *mylist

請參閱以下代碼:

mylist = ['Harry', 'Potter']
s = 'My last name is {1} and first name is {0}'.format(*mylist)
print(s)

輸出:我的姓是波特,名字是哈利。

檢查以下示例

列表示例

data = ["John", "Doe", 53.44]
format_string = "Hello"

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])

你好 John Doe 你目前的余額是 53 美元

元組示例

data = ("John", "Doe", 53.44)
format_string = "Hello"

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])

你好 John Doe 你目前的余額是 53 美元

暫無
暫無

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

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