将字符列表转换为字符串

nos*_*nos 401 python string

如果我有一个字符列表:

a = ['a','b','c','d']
Run Code Online (Sandbox Code Playgroud)

如何将其转换为单个字符串?

a = 'abcd'
Run Code Online (Sandbox Code Playgroud)

Dan*_*ach 565

使用join空字符串的方法将所有字符串与空字符串连接在一起,如下所示:

>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'
Run Code Online (Sandbox Code Playgroud)

  • 澄清:`"".join(['a','b','c'])`表示`加入数组的所有元素,用字符串""`分隔.以同样的方式,`"hi".join(["jim","bob","joe"])`将创建`"jim hi bob hi joe"`. (28认同)
  • 只需要在引号之间加上'''.join(list)` (17认同)

Pau*_*ine 36

这适用于JavaScript或Ruby,为什么不用Python?

>>> ['a', 'b', 'c'].join('')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
Run Code Online (Sandbox Code Playgroud)

但是在Python中,join方法是在str类中:

# this is the Python way
"".join(['a','b','c','d'])
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,不是吗?为什么在JavaScript或其他流行的脚本语言中join不是list对象中的方法?这是Python社区如何思考的一个例子.由于join返回一个字符串,它应该放在字符串类中,而不是放在列表类中,因此该str.join(list)方法意味着:使用str分隔符将列表连接成一个新字符串(在这种情况下str是一个空字符串).

不知怎的,过了一段时间我才开始喜欢这种思维方式.我可以抱怨Python设计中的很多东西,但不是它的连贯性.

  • join 是字符串方法而不是列表方法的主要原因是它接受*任何可迭代*,而不仅仅是列表。您可以使用生成器表达式、字典、集合、各种视图等。所以它比大多数语言中的数组连接操作灵活得多。 (5认同)

Kyl*_*yle 15

如果您的Python解释器是旧的(例如1.5.2,这在一些较旧的Linux发行版中很常见),那么您可能无法join()在任何旧的字符串对象上使用该方法,而您将需要使用字符串模块.例:

a = ['a', 'b', 'c', 'd']

try:
    b = ''.join(a)

except AttributeError:
    import string
    b = string.join(a, '')
Run Code Online (Sandbox Code Playgroud)

字符串b将是'abcd'.


big*_*gle 10

这可能是最快的方式:

>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'
Run Code Online (Sandbox Code Playgroud)

  • 过早优化.这很难阅读和理解正在发生的事情.除非用户在操作中需要性能,否则简单的'''.join()`更具可读性. (15认同)
  • @WinstonEwert是的,昨天我正在编写一个需要做这样的程序,并且我在程序中对这条线的性能进行了基准测试,结果显示它比'''快20%左右.(join [ 'A', 'b', 'C'])` (3认同)
  • 不同意 - 程序员需要为这些事情保持最快的方法.一个简单的操作,需要更长的时间是没什么大不了的.然而,这就是每个编写的程序最终会膨胀并占用太多资源的方式.当我们不养成尽可能精益求精的习惯时,我们最终会得到一个像......一样的世界,就像Windows Vista一样,或者Linux中的Upstart就是很多小捷径的好例子. '膨胀和漂浮',就像死在水里一样.他们也都很难看.为什么不使用str().join(a)这是100%富有表现力的imfho .. (3认同)
  • 我自己的基准测试显示 join 快 7 倍。http://pastebin.com/8nSc5Ek1。你介意分享你的基准吗? (2认同)

小智 5

reduce功能也有效

import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'
Run Code Online (Sandbox Code Playgroud)