ran*_*guy 40 python concatenation
鉴于这个无害的小清单:
>>> lst = ['o','s','s','a','m','a']
Run Code Online (Sandbox Code Playgroud)
我的目标是使用以下方法之一以pythonically方式连接小恶魔:
A.普通ol'用于完成工作的字符串函数,简短,无需导入
>>> ''.join(lst)
'ossama'
Run Code Online (Sandbox Code Playgroud)
B. lambda,lambda,lambda
>>> reduce(lambda x, y: x + y, lst)
'ossama'
Run Code Online (Sandbox Code Playgroud)
C.全球化(什么都不做,导入一切)
>>> import functools, operator
>>> functools.reduce(operator.add, lst)
'ossama'
Run Code Online (Sandbox Code Playgroud)
请建议其他pythonic方法来实现这项宽宏大量的任务.
请排名(pythonic级别)和评级解决方案给出简明的解释.
在这种情况下,最pythonic解决方案是最好的编码解决方案吗?
Sil*_*ost 60
''.join(lst)
Run Code Online (Sandbox Code Playgroud)
唯一的pythonic方式:
aby*_*byx 18
当然是join.我怎么知道?让我们以一种非常愚蠢的方式来做:
如果问题只是添加2个字符串,那么你最有可能使用它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]
Run Code Online (Sandbox Code Playgroud)
哇!Python只是告诉我要用什么!:)
这是最少的Pythonic方式:
out = ""
for x in range(len(lst)):
for y in range(len(lst)):
if x + y == len(lst)-1:
out = lst[y] + out
Run Code Online (Sandbox Code Playgroud)
我自己使用"join"方式,但是从python 2.6开始,有一个很少使用的基类型:bytearray.
Bytearrays可以是非常有用的 - 对于包含文本的字符串,因为最好的事情是在unicode中,"join"方式是要走的路 - 但如果你正在处理二进制数据,那么bytearrays可以更多pythonic和更有效:
>>> lst = ['o','s','s','a','m','a']
>>> a = bytearray(lst)
>>> a
bytearray(b'ossama')
>>> print a
ossama
Run Code Online (Sandbox Code Playgroud)
它是内置数据类型:不需要导入 - 只需使用 - 然后你可以使用bytearray而不是列表开头 - 所以它们应该比"join"更有效,因为没有数据复制到获取bytearray的字符串表示形式.
| 归档时间: |
|
| 查看次数: |
26006 次 |
| 最近记录: |