如何从字符串列表中创建以逗号分隔的字符串?

2024-12-31 08:37:00
admin
原创
45
摘要:问题描述:您更喜欢用什么方法来连接序列中的字符串,使得每两个连续对之间添加一个逗号。也就是说,您如何映射['a', 'b', 'c']到'a,b,c'?(案例['s']和[]应分别映射到's'和''。)我通常最终会使用类似的东西''.join(map(lambda x: x+',',l))[:-1],但也会感...

问题描述:

您更喜欢用什么方法来连接序列中的字符串,使得每两个连续对之间添加一个逗号。也就是说,您如何映射['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 指出的那样(感谢)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1006  
  华为作为全球领先的科技公司,其成功的关键之一在于其高效的研发管理体系——集成产品开发(IPD)。IPD不仅仅是一套流程工具,更是一种团队协作与文化融合的实践体系。通过IPD,华为将跨部门的资源、能力和智慧有效整合,实现了从产品概念到市场交付的全流程高效运作。IPD的核心在于打破传统职能部门的壁垒,强调团队协作与文化的深...
IPD集成产品开发流程   0  
  创新是企业持续发展的核心驱动力,而集成产品开发(IPD, Integrated Product Development)作为一种先进的管理方法,能够帮助企业实现从产品概念到市场落地的全流程优化。通过系统化的流程设计和跨职能团队的协同合作,IPD不仅能够提升开发效率,还能显著降低风险,确保产品在市场上具备竞争力。许多企业...
华为IPD流程   0  
  在快速变化的市场中,企业面临着缩短产品上市时间的巨大压力。消费者需求的多样化和技术的迅猛发展,使得产品生命周期日益缩短。企业必须更快地推出新产品,以抢占市场先机并满足客户期望。然而,传统的产品开发流程往往效率低下,难以应对这种挑战。集成产品开发(IPD)流程作为一种系统化的产品开发方法,能够帮助企业在确保质量的同时,显...
IPD培训课程   0  
  研发IPD(Integrated Product Development,集成产品开发)流程是企业实现高效产品开发的核心方法论之一。它通过跨部门协作、并行工程和结构化流程,确保产品从概念到市场的高效交付。然而,在IPD流程中,绩效评估与改进方法的设计与实施往往成为企业面临的重大挑战。由于研发活动的复杂性和不确定性,传统...
IPD流程分为几个阶段   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用