比方說,我有以下形式的字符串:替換字符串條紋
"000000111100011100001011000000001111"
,我想創建一個包含1條紋的長列表:
[4, 3, 1, 2, 4]
對此有沒有很好的一行?
比方說,我有以下形式的字符串:替換字符串條紋
"000000111100011100001011000000001111"
,我想創建一個包含1條紋的長列表:
[4, 3, 1, 2, 4]
對此有沒有很好的一行?
如果你不介意的from itertools import groupby
...
>>> from itertools import groupby
>>> [len(list(g)) for k, g in groupby(s) if k == '1']
[4, 3, 1, 2, 4]
>>> s = "000000111100011100001011000000001111"
>>> items = set(s)
>>> counts = [s.count(x) for x in items]
>>> counts
[1, 1]
>>>
可與正則表達式來完成,雖然不是很優雅的迭代工具解決方案
answer = [len(item) for item in filter(None, re.split(r"[^1]+", test_string))]
,或者更優雅:
answer = [len(item) for item in re.findall(r"1+", test_string)]
and mo再優雅依舊(學分喬恩):
answer = map(len, re.findall("1+", test_string))
爲什麼不只是使用匹配長度來加1''? – icktoofay
@icktoofay哦,是啊,這會讓這個更好,更新 –
如何只是︰'map(len,re.findall('1+',s))' –
>>> mystr = "000000111100011100001011000000001111"
>>> [len(s) for s in re.split("0+", mystr) if s]
[4, 3, 1, 2, 4]
沒有正則表達式的需要,只是str.split
>>> mystr = "000000111100011100001011000000001111"
>>> [len(s) for s in mystr.split('0') if s]
[4, 3, 1, 2, 4]
不是一個問題的答案。 – Hidde
OP甚至顯示輸出應該是什麼,這不符合你寫的東西.. –
該死的比我想的晚...對不起 – RussW