将字符列表转换为字符串

时间:2010-12-19 05:19:07

标签: python string

如果我有一个字符列表:

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

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

a = 'abcd'

12 个答案:

答案 0 :(得分:542)

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

>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'

答案 1 :(得分:33)

这适用于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'

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

# this is the Python way
"".join(['a','b','c','d'])

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

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

答案 2 :(得分:15)

如果你的Python解释器是旧的(例如1.5.2,这在一些较旧的Linux发行版中很常见),你可能没有join()可用作任何旧字符串对象的方法,而你将改为需要使用字符串模块。例如:

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

try:
    b = ''.join(a)

except AttributeError:
    import string
    b = string.join(a, '')

字符串b将为'abcd'

答案 3 :(得分:10)

这可能是最快的方式:

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

答案 4 :(得分:4)

reduce功能也可以使用

import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'

答案 5 :(得分:3)

h = ['a','b','c','d','e','f']
g = ''
for f in h:
    g = g + f

>>> g
'abcdef'

答案 6 :(得分:3)

join与空分隔符一起使用

h = ['a','b','c','d','e','f']
print ''.join(h)

或将reduceadd运算符

一起使用
import operator
h=['a','b','c','d']
reduce(operator.add, h)

答案 7 :(得分:2)

如果列表中包含数字,您可以将map()join()一起使用。

例如:

    arr = [3, 30, 34, 5, 9]
    ''.join(map(str,arr))

>> 3303459

答案 8 :(得分:1)

除了$ awk '/^NICK/ {p=$0; next} {print p,$0,(NF>2?"":"EMPTY")}' file NICK JEFF NOAA A4:80:15 EMPTY NICK JEFF NOAA A4:80:17 EMPTY NICK JEFF NOOI D0:F2:0B BASE-TREE_IN-M_K NICK STAN NOAA C1:46:6B EMPTY NICK STAN NOOI D5:75:0C BASE-TREE_OUT_OUT NICK INDEXER NOOI D5:75:0C SEAT_25 NICK INDEXER NOAA C1:46:6B EMPTY NICK VUZER NOAA A4:F2:CD EMPTY NICK VUZER NOOI D0:F2:2D SEAT_42_FLIGHT NICK VUZER NOAA A4:F2:CD EMPTY NICK CAPTAIN NOOI A4:82:8D EMPTY NICK CAPTAIN NOAA A4:82:8F EMPTY NICK CAPTAIN NOOI 40:63:07 SYS-BRAVO_X1 NICK CAPTAIN NOOI 40:62:DB SYS-BRAVO_X2 NICK CAPTAIN NOOI 40:62:B5 SYS-BRAVO_X3 NICK CAPTAIN NOOI D0:47:4A BASE-TREE_OUT_OUT NICK CAPTAIN NOOI 51:30:45 NOBASE-INDEX_OUT_FIF NICK CAPTAIN NOOI A4:82:8D EMPTY NICK CAPTAIN NOAA A4:82:8F EMPTY 这是最自然的方式之外,一种可能性是使用str.join并滥用io.StringIO一次编写所有元素:

writelines

打印:

import io

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

out = io.StringIO()
out.writelines(a)
print(out.getvalue())

将此方法与生成器函数或不是abcd tuple的迭代器一起使用时,它将保存list用来分配正确大小的临时列表创建一口气(从内存角度来看,一个1字符的字符串列表非常昂贵)。

如果内存不足,并且输入的对象是惰性评估,则此方法是最佳解决方案。

答案 9 :(得分:0)

你也可以像这样使用operator.concat()

>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'

如果您使用的是Python 3,则需要预先添加:

>>> from functools import reduce

因为内置reduce()已从Python 3中删除,现在位于functools.reduce()

答案 10 :(得分:-1)

g = ['a', 'b', 'c', 'd']
f=''
for i in range(0,len(g)):
    f=f+g[i]
print f

答案 11 :(得分:-1)

    str = ''
    for letter in a:
        str += letter
    print str