题
这将是你的首选方式串连串的序列之间每两个连续的对一个逗号加入。也就是说,如何做你的地图,例如, [ 'a', 'b', 'c' ]
要 'a,b,c'
?(的情况下 [ s ]
和 []
应该是映射到 s
和 ''
, 分别。)
我通常的最终使用的东西喜欢 ''.join(map(lambda x: x+',',l))[:-1]
, 但也感到有些不满意。
编辑:我既感到羞耻和幸福的解决方案就是这么简单。很显然,我们几乎没有一个知道我在做什么。(我可能需要的"简单"的级联中去,并以某种方式记住 s.join([e1,e2,...])
作为一个简写 s+e1+e2+...
.)
解决方案
myList = ['a','b','c','d']
myString = ",".join(myList )
这不会工作如果列表中包含的数字。
作为 里卡多*雷耶斯 建议,如果它包含非串的类型(例如整数、浮筒,弹球,没有一)那么做:
myList = ','.join(map(str, myList))
其他提示
为什么地图/lambda魔法?不,这工作吗?
>>>foo = [ 'a', 'b', 'c' ]
>>>print ",".join(foo)
a,b,c
>>>print ",".join([])
>>>print ",".join(['a'])
a
编辑:@标biek指出的情况下的数字。也许是列理解:
>>>','.join([str(x) for x in foo])
被更多的"功能已大大增强".
Edit2:谢谢你的建议。我将使用的发电机,而非列表理解的未来。
>>>','.join(str(x) for x in foo)
",".join(l)
不会的工作对于所有情况。我建议使用csv模块与StringIO
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'
这里是一个替代解决方案在Python3.0它允许非串列项目:
>>> alist = ['a', 1, (2, 'b')]
一个标准的方式
>>> ", ".join(map(str, alist)) "a, 1, (2, 'b')"
替代解决方案
>>> import io >>> s = io.StringIO() >>> print(*alist, file=s, sep=', ', end='') >>> s.getvalue() "a, 1, (2, 'b')"
注:空间逗号后面是有意的。
@彼得*霍夫曼
使用发电机的表情有的利益也产生一个迭代,但可以节省的进口迭代.此外,列表解析一般都是优选地图,因此,我期望的生表现要优于imap。
>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar'
不你只是想:
",".join(l)
显然地它变得更加复杂,如果你需要引/逃跑的逗号等的价值观。在这种情况下,我建议看csv模块中的标准图书馆:
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
my_list
可能含有的任何类型的变量。这避免的结果 'A,,,D,E'
.
@jmanning2k使用一个名单的理解具有的缺点在于创建一个新的临时清单。好的解决方案将使用的迭代.imap其返回的一个迭代
from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
换清单,该清单列有编号做到以下几点:
string = ''.join([str(i) for i in list])
l=['a', 1, 'b', 2]
print str(l)[1:-1]
Output: "'a', 1, 'b', 2"
除非我失去了一些东西, ','.join(foo)
应该做什么你要求。
>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'
(编辑:并作为jmanning2k指出的,
','.join([str(x) for x in foo])
是安全的和相当的功能已大大增强,虽然所得串将是困难的分析如果元素可以包含逗号--在这一点上,你需要的全部力量 csv
模块,作为道格拉斯指出,在他的回答。)
这是一个示例列表
>>> 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
我要说的 csv
库是唯一明智的选择在这里,因为它的建立是为了应付所有csv使用情况如逗号在一串,等等。
给出一个列表 l
到.csv文件:
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(l) # this will output l as a single row.
它还可以使用 writer.writerows(iterable)
输出多行为csv。
这个例子是兼容Python3,作为其他的答案在这里使用 StringIO
这是蟒蛇2.
只是一点点这样的东西:)
String = "Once:Upon:a:Time:A:Long:Time:Ago"
ding = String.split(':')
ring = (" , ").join(ding)
print(ring)
输出:一旦旦,a,时间一长,时间,前
我的两个美分。我喜欢更简单一行代码在蟒蛇:
>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'
这是python,工作对于字符串数字,没有和empty string.它的短期和满足的要求。如果名单不是要包含数字,我们可以使用这种简单的变化:
>>> ','.join(ifilter(lambda x: x, l))
也是这个解决方案并不创建一个新的名单,但采用的迭代,像@彼得*霍夫曼指出(谢谢).