在python中加入字符串列表,并将每个字符串都用引号引起来


101

我有:

words = ['hello', 'world', 'you', 'look', 'nice']

我希望有:

'"hello", "world", "you", "look", "nice"'

用Python做到这一点最简单的方法是什么?

Answers:


173
>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> ', '.join('"{0}"'.format(w) for w in words)
'"hello", "world", "you", "look", "nice"'

1
@Meow repr在此特定情况下使用的是小怪癖,而不是用引号
弄清楚

1
@jamlak好的,如果您的字符串中带有引号,repr对我来说似乎更安全。
喵2016年

50

您也可以执行一次format通话

>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> '"{0}"'.format('", "'.join(words))
'"hello", "world", "you", "look", "nice"'

更新:一些基准测试(以2009 Mbps的速度执行):

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.32559704780578613

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; '"{}"'.format('", "'.join(words))""").timeit(1000)
0.018904924392700195

所以看来format实际上很贵

更新2:在@JCode的注释之后,添加了一个map以确保join可以运行,Python 2.7.12

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.08646488189697266

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; '"{}"'.format('", "'.join(map(str, words)))""").timeit(1000)
0.04855608940124512

>>> timeit.Timer("""words = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.17348504066467285

>>> timeit.Timer("""words = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; '"{}"'.format('", "'.join(map(str, words)))""").timeit(1000)
0.06372308731079102

它比jamylak提出的性能更好吗?
kadrian 2012年

3
这是比接受的答案更好的解决方案。
sage88

2
@ sage88不,不是。预优化是邪恶的,这里微小的速度差异有0.0000001%的机会是Python脚本的整个瓶颈。而且,此代码的直观性要差得多,因此它并不是更好,它的运行速度略快。我的解决方案更具Python可读性
-Jamylak

@marchelbling Benchmark无效,因为jamylak的解决方案也适用于非字符串的迭代。替换.join(words).join(map(str, words))并向我们​​展示如何进行。
WloHu

@JCode更新了基准。差距较小,但我的机器仍获得2倍的增益。
出发

39

您可以尝试以下方法:

str(words)[1:-1]

3
如何添加引号?
Dejell '16

6
这会添加单引号而不是双引号,但是单词内的引号将自动转义。+1代表聪明。
费利克斯·卡隆

这是使Python如此有意义的聪明窍门之一。
马克斯·冯·希佩尔

太喜欢了,这真是太神奇了,但是我可能会使用其他解决方案,以便使我的开发人员的代码更直观。
Yash Sharma


3

@jamylak答案的更新版本带有F字符串(适用于python 3.6+),我已经在SQL脚本使用的字符串中使用了反引号。

keys = ['foo', 'bar' , 'omg']
', '.join(f'`{k}`' for k in keys)
# result: '`foo`, `bar`, `omg`'

可行,但是否被认为是规范的pythonic方法?
Marcel Flygare
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.