2012-02-20 61 views
1

我有包含用逗號分隔的每個單詞的字符串。我想通過python中的其他逗號分割字符串。我應該怎麼做?在Python中的字符串中的每隔一個逗號之後的字符串拆分

"xyz,abc,jkl,pqr"應該給"xyzabc"作爲一個字符串和"jklpqr"作爲另一個字符串

+0

你的問題不明確。如果按每個逗號分割,結果將是xyz abc jul pqr作爲四個不同的字符串。 – Saphrosit 2012-02-20 18:48:45

+0

好的例子請根據示例 – 2012-02-20 18:49:56

回答

6

它可能更容易分裂的每一個逗號,然後再結合對

>>> original = 'a,1,b,2,c,3' 
>>> s = original.split(',') 
>>> s 
['a', '1', 'b', '2', 'c', '3'] 
>>> alternate = map(''.join, zip(s[::2], s[1::2])) 
>>> alternate 
['a1', 'b2', 'c3'] 

是那個在你想要?

+0

一個溫和的警告:這可能是意想不到的後果,即如果原件沒有偶數個元素,最後一個條目會悄悄丟失。也許這沒關係,儘管當我想要的時候我更願意強迫自己明白。 – DSM 2012-02-20 19:04:30

+0

確實 - 我不確定在這裏處理它最乾淨的方式是什麼。也許只是將它包裝在一個函數中並明確檢查。 – Useless 2012-02-20 19:10:53

+1

@Useless:您可以使用'izip_longest'(請參閱我的回答)。 – Marcin 2012-02-20 19:31:07

-3

喜歡這個

"a,b,c,d".split(',') 
+0

回答你是否指''a,b,c,d「.split(',')'?但它會給我abcd,我不想要 – 2012-02-20 18:48:50

0
str = "a,b,c,d".split(",") 
print ["".join(str[i:i+2]) for i in range(0, len(str), 2)] 
+0

(a) t將str用作變量(b)在列表解析中使用索引可能相當神祕。 – Marcin 2012-02-20 19:16:29

0

就劈在每一個逗號,然後再結合回來:

splitList = someString.split(",") 
joinedString = ','.join([splitList[i - 1] + splitList[i] for i in range(1, len(splitList), 2)] 
2

拆分,並重新加入。

所以,分裂:

In [173]: "a,b,c,d".split(',') 
Out[173]: ['a', 'b', 'c', 'd'] 

而且歸隊:

In [193]: z = iter("a,b,c,d".split(',')) 
In [194]: [a+b for a,b in zip(*([z]*2))] 
Out[194]: ['ab', 'cd'] 

這工作,因爲([z]*2)是兩個因素,這兩者是相同的迭代器z的列表。因此,zip採用z中的第一個,然後是第二個元素來創建每個元組。

這也可以作爲一個oneliner,因爲在[foo]*nfoo只計算一次,不論它是一個變量或一個更復雜的表達式:

In [195]: [a+b for a,b in zip(*[iter("a,b,c,d".split(','))]*2)] 
Out[195]: ['ab', 'cd'] 

我也切出一對括號,因爲一元*優先級低於二進制*

感謝@pillmuncher的指出,這可以用izip_longest進行擴展,奇數元素的處理名單:

In [214]: from itertools import izip_longest 

In [215]: [a+b for a,b in izip_longest(*[iter("a,b,c,d,e".split(','))]*2, fillvalue='')] 
Out[215]: ['ab', 'cd', 'e'] 

(參見:http://docs.python.org/library/itertools.html#itertools.izip_longest

+1

爲什麼不只是'zip(z,z)'? – pillmuncher 2012-02-20 19:21:42

+0

@pillmuncher那麼,'zip(z,z)'不能是一個oneliner,這表明了zip-with-list-multiply idiom。雖然,'itertools.izip_longest()'好點。 – Marcin 2012-02-20 19:24:52