你将如何从列表中逗号分隔的string?
你会喜欢什么样的方式来连接序列中的string,以便在每两个连续的对之间添加一个逗号。 也就是说,你如何将[ 'a', 'b', 'c' ]
映射到'a,b,c'
? (案例[ s ]
和[]
应分别映射到s
和''
)。
我通常最终会使用像''.join(map(lambda x: x+',',l))[:-1]
,但也有点不满意。
编辑:我很惭愧和高兴,解决scheme是如此简单。 显然我不知道我在做什么。 (我以前可能需要“简单”连接,并以某种方式记住s.join([e1,e2,...])
作为s+e1+e2+...
的简写。)
myList = ['a','b','c','d'] myString = ",".join(myList )
如果列表包含数字,这将不起作用。
正如里卡多·雷耶斯 ( Ricardo Reyes)所build议的那样,如果它包含非stringtypes(例如整数,浮点数,布尔值,无)
myList = ','.join(map(str, myList))
为什么地图/ lambda魔术? 这不工作吗?
>>>foo = [ 'a', 'b', 'c' ] >>>print ",".join(foo) a,b,c >>>print ",".join([]) >>>print ",".join(['a']) a
编辑:@ mark-biek指出数字的情况。 也许是列表理解:
>>>','.join([str(x) for x in foo])
更“pythonic”。
编辑2:感谢您的build议。 我将在未来使用生成器而不是列表理解。
>>>','.join(str(x) for x in foo)
你不只是想要:
",".join(l)
显然它会变得更复杂,如果你需要引用/转义逗号等值。 在这种情况下,我会build议看看标准库中的csv模块:
彼得·霍夫曼
使用生成器expression式的好处还在于生成一个迭代器,但保存了导入itertools。 此外,列表parsing通常是首选映射,因此,我希望生成器expression式优先于imap。
>>> l = [1, "foo", 4 ,"bar"] >>> ",".join(str(bit) for bit in l) '1,foo,4,bar'
这是Python 3.0中的一个替代解决scheme,它允许非string列表项:
>>> alist = ['a', 1, (2, 'b')]
-
一个标准的方式
>>> ", ".join(map(str, alist)) "a, 1, (2, 'b')"
-
替代解决scheme
>>> import io >>> s = io.StringIO() >>> print(*alist, file=s, sep=', ', end='') >>> s.getvalue() "a, 1, (2, 'b')"
注:逗号后的空格是有意的。
",".join(l)
将不适用于所有情况。 我build议与StringIO一起使用csv模块
import StringIO import csv l = ['list','of','["""crazy"quotes"and\'',123,'other things'] line = StringIO.StringIO() writer = csv.writer(line) writer.writerow(l) csvcontent = line.getvalue() # 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'
使用列表理解@ jmanning2k有创build一个新的临时列表的缺点。 更好的解决scheme将使用itertools.imap返回一个迭代器
from itertools import imap l = [1, "foo", 4 ,"bar"] ",".join(imap(str, l))
转换包含数字的列表,请执行以下操作:
string = ''.join([str(i) for i in list])
除非我错过了一些东西,否则','.join(foo)
应该做你想要的东西。
>>> ','.join(['']) '' >>> ','.join(['s']) 's' >>> ','.join(['a','b','c']) 'a,b,c'
(编辑:正如jmanning2k指出的那样,
','.join([str(x) for x in foo])
是更安全和相当Pythonic,尽pipe如果元素可以包含逗号,结果string将很难parsing – 在这一点上,你需要csv
模块的全部力量,道格拉斯在他的答案中指出)。
l=['a', 1, 'b', 2] print str(l)[1:-1] Output: "'a', 1, 'b', 2"
>>> my_list = ['A', '', '', 'D', 'E',] >>> ",".join([str(i) for i in my_list if i]) 'A,D,E'
my_list
可能包含任何types的variables。 这避免了结果'A,,,D,E'
。
这是一个列表的例子
>>> myList = [['Apple'],['Orange']] >>> myList = ','.join(map(str, [i[0] for i in myList])) >>> print "Output:", myList Output: Apple,Orange
更准确:-
>>> myList = [['Apple'],['Orange']] >>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList])) >>> print "Output:", myList Output: Apple,Orange
示例2: –
myList = ['Apple','Orange'] myList = ','.join(map(str, myList)) print "Output:", myList Output: Apple,Orange