如果我有一个字符列表:
a = ['a','b','c','d']
如何将其转换为单个字符串?
a = 'abcd'
答案 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)
或将reduce
与add
运算符
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