如何从字符串列表中创建以逗号分隔的字符串?
- 2024-12-31 08:37:00
- admin 原创
- 45
问题描述:
您更喜欢用什么方法来连接序列中的字符串,使得每两个连续对之间添加一个逗号。也就是说,您如何映射['a', 'b', 'c']
到'a,b,c'
?(案例['s']
和[]
应分别映射到's'
和''
。)
我通常最终会使用类似的东西''.join(map(lambda x: x+',',l))[:-1]
,但也会感到有些不满意。
解决方案 1:
my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
'a,b,c,d'
如果列表包含整数,则此方法无效
如果列表包含非字符串类型(例如整数,浮点数,布尔值,无),则执行以下操作:
my_string = ','.join(map(str, my_list))
解决方案 2:
为什么是map
/lambda
魔法?这不起作用吗?
>>> foo = ['a', 'b', 'c']
>>> print(','.join(foo))
a,b,c
>>> print(','.join([]))
>>> print(','.join(['a']))
a
如果列表中有数字,则可以使用列表推导:
>>> ','.join([str(x) for x in foo])
或生成器表达式:
>>> ','.join(str(x) for x in foo)
解决方案 3:
",".join(l)
并非在所有情况下都适用。我建议使用带有 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
'
解决方案 4:
@彼得·霍夫曼
使用生成器表达式的好处是还可以生成迭代器,但省去了导入 itertools 的步骤。此外,列表推导通常比映射更受青睐,因此,我预计生成器表达式会比 imap 更受青睐。
>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar'
解决方案 5:
这是 Python 3.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')"
注意:逗号后面的空格是故意的。
解决方案 6:
你不只是想要:
",".join(l)
显然,如果您需要在值中引用/转义逗号等,情况会变得更加复杂。在这种情况下,我建议查看标准库中的 csv 模块:
https://docs.python.org/library/csv.html
解决方案 7:
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
my_list
可以包含任何类型的变量。这样可以避免出现结果'A,,,D,E'
。
解决方案 8:
l=['a', 1, 'b', 2]
print str(l)[1:-1]
Output: "'a', 1, 'b', 2"
解决方案 9:
@jmanning2k 使用列表推导的缺点是创建一个新的临时列表。更好的解决方案是使用 itertools.imap,它返回一个迭代器
from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
解决方案 10:
如果您想采用快捷方式:):
','.join([str(word) for word in wordList])
但如果你想用逻辑来炫耀:):
wordList = ['USD', 'EUR', 'JPY', 'NZD', 'CHF', 'CAD']
stringText = ''
for word in wordList:
stringText += word + ','
stringText = stringText[:-2] # get rid of last comma
print(stringText)
解决方案 11:
这是一个带有列表的示例
>>> 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
解决方案 12:
我想说这个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。
此示例与 Python 3 兼容,因为这里的另一个答案使用的StringIO
是 Python 2。
解决方案 13:
除非我遗漏了什么,','.join(foo)
否则应该按照你的要求去做。
>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'
(编辑:正如 jmanning2k 指出的那样,
','.join([str(x) for x in foo])
更安全并且非常符合 Python 风格,但是如果元素可以包含逗号,则生成的字符串将很难解析 - 此时,您需要模块的全部功能csv
,正如 Douglas 在他的回答中指出的那样。)
解决方案 14:
mmm 还需要 SQL :
l = ["foo" , "baar" , 6]
where_clause = "..... IN ("+(','.join([ f"'{x}'" for x in l]))+")"
>> "..... IN ('foo','baar','6')"
要求
解决方案 15:
我的意见。我更喜欢用 Python 写一行更简单的代码:
>>> 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 风格,适用于字符串、数字、None 和空字符串。它很短,满足要求。如果列表不包含数字,我们可以使用这种更简单的变体:
>>> ','.join(ifilter(lambda x: x, l))
另外,这个解决方案不会创建新列表,而是使用迭代器,就像@Peter Hoffmann 指出的那样(感谢)。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件