簡體   English   中英

如何將列表格式化為字符串?

[英]How to formatting a list into a string?

我正在嘗試在python中格式化一個字符串,該字符串將參數作為名稱列表中的項。 要注意的是,我只想在同一字符串中打印所有帶有雙引號和反斜杠且一個接一個的列表項。 代碼是:

list_names=['Alex', 'John', 'Joseph J']
String_to_pring='Hi my name is (\\"%s\\")'%(list_names)

輸出應如下所示:

'Hi my name is (\"Alex\",\"John\",\"Joseph J\")'

但是相反,我一直這樣:

'Hi my names is (\"['Alex','John','Joseph J']\")'

我什至嘗試使用.format()json.dumps()但結果仍然相同。

有什么方法可以打印所需的輸出,還是可以一次只打印每個列表項?

無需更改大量代碼,您只需格式化已轉換為元組的列表的repr表示形式。

# proper way - this is what you actually want
list_names = ['Alex', 'John', 'Joseph J']
string_to_print = 'Hi my name is %s' % (repr(tuple(list_names)))
 
print(string_to_print)
# Hi my name is ('Alex', 'John', 'Joseph J')

如果要獲得准確的輸出,只需執行一些字符串替換:

# improper way
list_names = ['Alex', 'John', 'Joseph J']
string_to_print = 'Hi my name is %s' % (repr(tuple(list_names)).replace("\'", '\\"'))

print(string_to_print)
# Hi my name is (\"Alex\", \"John\", \"Joseph J\")

如果您嘗試將string_to_print傳遞到其他地方,請先嘗試正確的方法,它實際上可能對您string_to_print


如果您足夠注意,會發現前面的“不正確的方式”包含一個小錯誤,請嘗試將此操作在list_names添加"Alex's house" ,輸出如下所示:

Hi my name is (\"Alex\", \"John\", \"Joseph J\", "Alex\"s house")

要解決該錯誤,您需要使用re.sub()來更好地進行替換。

from re import sub

list_names = ['Alex', 'John', 'Joseph J', "Alex's house"]
string_to_print = 'Hi my name is %s' % (sub(r'([\'\"])(.*?)(?!\\\1)(\1)', r'\"\2\"', repr(tuple(list_names))))
print(string_to_print)

但是,如果在使用過程中不會發生這種情況,我建議您繼續使用“不正確的方式”,因為它要簡單得多。

沒有將列表格式化為人類友好的字符串的功能您必須自己格式化列表:

names = ",".join(r'\"{}\"'.format(name) for name in list_names)
print(names)
#\"Alex\",\"John\",\"Joseph J\"
print('Hi my name is ({})'.format(names))
#Hi my name is (\"Alex\",\"John\",\"Joseph J\")

這是使用formatjoin一種方法:

list_names = ['Alex', 'John', 'Joseph J']
String_to_pring='Hi my name is (\\"{}\\")'.format('\\",\\"'.join(i for i in list_names))

# Hi my name is (\"Alex\",\"John\",\"Joseph J\")

暫無
暫無

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

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