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

kad*_*ian 81 python string join list

我有:

words = ['hello', 'world', 'you', 'look', 'nice']
Run Code Online (Sandbox Code Playgroud)

我希望有:

'"hello", "world", "you", "look", "nice"'
Run Code Online (Sandbox Code Playgroud)

使用Python最简单的方法是什么?

jam*_*lak 140

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

  • ','.join('{!r}'。format(w)for w in word) (2认同)

mar*_*ing 44

你也可以进行一次format通话

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

更新:一些基准测试(在2009 mbp上执行):

>>> 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
Run Code Online (Sandbox Code Playgroud)

所以看起来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
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚编辑了我的帖子以添加一些基准测试 (5认同)
  • 这是一个比接受的答案更好的解决方案. (3认同)
  • @ sage88不,不是.预优化是邪恶的,这里微不足道的速度差异有0.0000001%的可能性是Python脚本的整个瓶颈.此代码也不那么直观,因此它不是*更好*,它*非常快一点*.我的解决方案更加pythonic和可读性 (2认同)

小智 28

你可以试试这个:

str(words)[1:-1]
Run Code Online (Sandbox Code Playgroud)

  • 这会添加单引号而不是double,但单词中的引号将自动转义.+1为聪明. (5认同)
  • 它是如何添加引号的? (2认同)

Emm*_*ler 8

>>> ', '.join(['"%s"' % w for w in words])
Run Code Online (Sandbox Code Playgroud)

  • 更好地使用`format()`和`[]`在这里不是必需的。 (2认同)

Gru*_*ber 7

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

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