Join a list of strings in python and wrap each string in quotation marks

前端 未结 5 970
时光说笑
时光说笑 2020-12-04 11:54

I\'ve got:

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

I want to have:

\'\"hello\", \"world\", \"you\", \"l         


        
相关标签:
5条回答
  • 2020-12-04 12:25

    An updated version of @jamylak answer with F Strings (for python 3.6+), I've used backticks for a string used for a SQL script.

    keys = ['foo', 'bar' , 'omg']
    ', '.join(f'`{k}`' for k in keys)
    # result: '`foo`, `bar`, `omg`'
    
    0 讨论(0)
  • 2020-12-04 12:28

    You can try this :

    str(words)[1:-1]
    
    0 讨论(0)
  • 2020-12-04 12:45

    you may also perform a single format call

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

    Update: Some benchmarking (performed on a 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
    

    So it seems that format is actually quite expensive

    Update 2: following @JCode's comment, adding a map to ensure that join will work, 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
    
    0 讨论(0)
  • 2020-12-04 12:47
    >>> ', '.join(['"%s"' % w for w in words])
    
    0 讨论(0)
  • 2020-12-04 12:48
    >>> words = ['hello', 'world', 'you', 'look', 'nice']
    >>> ', '.join('"{0}"'.format(w) for w in words)
    '"hello", "world", "you", "look", "nice"'
    
    0 讨论(0)
提交回复
热议问题