关于python:连接列表元素

Concatenate elements of a list

本问题已经有最佳答案,请猛点这里访问。

我有一张像l=['a', 'b', 'c']这样的单子我想要一根像"abc"这样的绳子。所以事实上,结果是l[0]+l[1]+l[2],也可以写成

1
2
3
s = ''
for i in l:
    s += i

有什么方法可以更优雅地完成这个任务吗?


使用str.join()

1
s = ''.join(l)

调用它的字符串用作l中字符串之间的分隔符:

1
2
3
4
5
6
7
>>> l=['a', 'b', 'c']
>>> ''.join(l)
'abc'
>>> '-'.join(l)
'a-b-c'
>>> ' - spam ham and eggs - '.join(l)
'a - spam ham and eggs - b - spam ham and eggs - c'

使用str.join()比一个接一个地连接元素快得多,因为它必须为每个连接创建一个新的字符串对象。str.join()只需要创建一个新的字符串对象。

注意,str.join()将在输入序列上循环两次。一次计算输出字符串需要有多大,然后再次构建它。作为副作用,这意味着使用列表理解而不是生成器表达式更快:

1
2
slower_gen_expr = ' - '.join('{}: {}'.format(key, value) for key, value in some_dict)
faster_list_comp = ' - '.join(['{}: {}'.format(key, value) for key, value in some_dict])