Python:一行代码实现分割、去除空格和拼接

14

我很好奇是否有一些我不知道的Python技巧可以实现一些娱乐功能。

考虑到以下代码行:

csvData.append(','.join([line.split(":").strip() for x in L]))

我试图在冒号(:)处分割一行文字,去除其周围的空格,并使用逗号(,)进行连接。

问题在于,由于数组是从line.split(":")返回的,

for x in L #<== L doesn't exist!

因为line.split(":")返回的数组没有名称,所以这会导致问题。

那么我很好奇是否有一个简洁的语法可以一次性解决这个问题?

谢谢!

3个回答

29
>>> line = 'a: b :c:d:e  :f:gh   '
>>> ','.join(x.strip() for x in line.split(':'))
'a,b,c,d,e,f,gh'

您也可以这样做:

>>> line.replace(':',',').replace(' ','')
'a,b,c,d,e,f,gh'

4
我更喜欢第一个答案,因为第二个答案对于空格的情况不够健壮。 - DSM
第一個答案,太棒了! - Rob.Kachmar
@DSM 你觉得这个怎么样:for sp in [' ', '\n', '\t']: line = line.replace(sp, '') - visitor

1

类似这样的内容:

>>> L = "1:2:3:4"
>>> result = ",".join([item.strip() for item in L.split(":")])
>>> result
'1,2,3,4'

掌握列表推导需要一些时间。当你将它们分解时,它们基本上只是打包的循环。

因此,在学习时,尝试将其视为普通循环,然后将其转换为列表推导。

在您的示例中,您没有将 line 变量分配到任何地方,因此即使在标准循环中,它也会出现错误。

>>> for x in L:
...     items = line.split(":")
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'line' is not defined
>>>

1
无需在中间建立列表。 - Burhan Khalid
是的,没错,但对于初学者来说,可能会感到困惑,不知道为什么它能起作用。 - monkut

1
给定一个字符串S:
','.join([x.strip() for x in s.split(':')])

2
不需要列表推导式,只需使用 ','.join(x.strip() for x in s.split(':')) - Ashwini Chaudhary
虽然列表推导式可能会澄清部分解决方案,但这是真的。 - arturhoo
@AshwiniChaudhary,你的答案有何不同? - jouell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接