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

前端 未结 5 979
时光说笑
时光说笑 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: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
    

提交回复
热议问题