如何将列表格式化为字符串?

时间:2018-04-08 06:52:33

标签: python string formatting

我正在尝试格式化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(),但结果仍然相同。

有没有办法打印所需的输出,或者我一次只能打印每个列表项吗?

3 个答案:

答案 0 :(得分:2)

在不改变代码的情况下,您可以简单地格式化已转换为元组的列表的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传递到其他地方,请先尝试正确的方法,它可能实际上适合您。

如果你足够谨慎,你会发现以前的不正确的方式"包含一个小错误,请尝试将"Alex's house"添加到list_names中,输出将如下所示:

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)

但是如果你在使用过程中不会发生这样的事情,我建议继续使用"不正确的方式"因为它更简单。

答案 1 :(得分:0)

没有将列表格式化为人性化字符串的功能您必须自己格式化列表:

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\")

答案 2 :(得分:0)

这是使用formatjoin的一种方式:

curl_setopt($ch, CURLOPT_POST, 1);