最优雅的字符串连接方式是什么
给定这个无害的小列表:
>>> lst = ['o','s','s','a','m','a']
我的目标是用Python的方式把这些小家伙连接起来,方法有以下几种:
A. 用一个普通的字符串函数来完成,简单,不需要导入任何东西
>>> ''.join(lst)
'ossama'
B. 使用lambda表达式,反复使用lambda
>>> reduce(lambda x, y: x + y, lst)
'ossama'
C. 全球化(什么都不做,导入所有东西)
>>> import functools, operator
>>> functools.reduce(operator.add, lst)
'ossama'
还有其他Pythonic的方式可以完成这个伟大的任务吗?
请对这些解决方案进行排名(Pythonic程度)并给出简洁的解释。
在这种情况下,最Pythonic的解决方案就是最好的编码解决方案吗?
6 个回答
18
当然是 join
。我怎么知道的呢?我们用一种很简单的方法来看看:
如果问题只是把两个字符串加在一起,你很可能会用 str1 + str2
。那要怎么把这个提升到另一个层次呢?对于大多数人来说(我想),直觉上会想到用 sum
。我们来看看这样做的结果:
In [1]: example = ['a', 'b', 'c']
In [2]: sum(example, '')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython console> in <module>()
TypeError: sum() can't sum strings [use ''.join(seq) instead]
哇!Python 直接告诉我该用什么了! :)
72
''.join(lst)
唯一符合Python风格的方法:
- 清晰(这就是所有大佬们的做法,他们也希望看到这样的代码),
- 简单(不需要额外的导入,且在所有版本中都很稳定),
- 快速(用C语言写的),
- 简洁(在空字符串上,可以把可迭代对象的元素连接起来!)。
40
看看Guido写的文章,里面讲了关于Python优化的内容。文章提到如何把数字列表转换成字符串。除非你有很好的理由去做其他事情,否则建议使用join
这个方法。