2012-09-12 16 views
5

我很好奇,如果他們是一些Python魔法我可能不知道完成一個給定的位線輕浮的Python:拆分,剝離,並在一行中加入

的:

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

我「M試圖在:分割線,修剪它周圍的空白,並加入上,

問題是,由於陣列從line.split(":")返回時,

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

會造成一些問題,因爲我沒有名字由line.split(":")

所以我很好奇,如果有一個性感的一塊語法,我可以使用一次性完成這個返回的數組?

乾杯!

+0

固定條剝離() – PandemoniumSyndicate

回答

18
>>> 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' 
+0

第二個答案,地獄是 – PandemoniumSyndicate

+0

+1替換()'。 :) –

+4

我其實更喜歡第一個答案,因爲第二個答案對於空格是不那麼健壯。 – DSM

0

喜歡的東西?:

>>> 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

無需在中間建立一個列表 –

+0

是的,的確如此,但對於初學者來說,它可能會混淆爲什麼這會起作用。 – monkut

0

給定一個字符串S:

','.join([x.strip() for x in s.split(':')]) 
+2

這裏不需要列表理解,只是'','。在s.split(':'))中加入x(x.strip()for x)。 –

+0

誠然,雖然列表理解可能會闡明部分解決方案。 – arturhoo