我有包含用逗號分隔的每個單詞的字符串。我想通過python中的其他逗號分割字符串。我應該怎麼做?在Python中的字符串中的每隔一個逗號之後的字符串拆分
如"xyz,abc,jkl,pqr"
應該給"xyzabc"
作爲一個字符串和"jklpqr"
作爲另一個字符串
我有包含用逗號分隔的每個單詞的字符串。我想通過python中的其他逗號分割字符串。我應該怎麼做?在Python中的字符串中的每隔一個逗號之後的字符串拆分
如"xyz,abc,jkl,pqr"
應該給"xyzabc"
作爲一個字符串和"jklpqr"
作爲另一個字符串
它可能更容易分裂的每一個逗號,然後再結合對
>>> 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']
是那個在你想要?
喜歡這個
"a,b,c,d".split(',')
回答你是否指''a,b,c,d「.split(',')'?但它會給我abcd,我不想要 – 2012-02-20 18:48:50
str = "a,b,c,d".split(",")
print ["".join(str[i:i+2]) for i in range(0, len(str), 2)]
(a) t將str用作變量(b)在列表解析中使用索引可能相當神祕。 – Marcin 2012-02-20 19:16:29
就劈在每一個逗號,然後再結合回來:
splitList = someString.split(",")
joinedString = ','.join([splitList[i - 1] + splitList[i] for i in range(1, len(splitList), 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]*n
foo
只計算一次,不論它是一個變量或一個更復雜的表達式:
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)
爲什麼不只是'zip(z,z)'? – pillmuncher 2012-02-20 19:21:42
@pillmuncher那麼,'zip(z,z)'不能是一個oneliner,這表明了zip-with-list-multiply idiom。雖然,'itertools.izip_longest()'好點。 – Marcin 2012-02-20 19:24:52
你的問題不明確。如果按每個逗號分割,結果將是xyz abc jul pqr作爲四個不同的字符串。 – Saphrosit 2012-02-20 18:48:45
好的例子請根據示例 – 2012-02-20 18:49:56