假设我有一个以下形式的字符串:
"000000111100011100001011000000001111"
我想创建一个包含1条纹长度的列表:
[4, 3, 1, 2, 4]
这有一个很好的单行吗?
答案 0 :(得分:15)
如果您不介意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]
答案 1 :(得分:2)
可以使用正则表达式完成,但不如itertools解决方案那么优雅
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)]
更优雅(Jon的信用):
answer = map(len, re.findall("1+", test_string))
答案 2 :(得分:1)
>>> mystr = "000000111100011100001011000000001111"
>>> [len(s) for s in re.split("0+", mystr) if s]
[4, 3, 1, 2, 4]
答案 3 :(得分:1)
不需要正则表达式,只需str.split
>>> mystr = "000000111100011100001011000000001111"
>>> [len(s) for s in mystr.split('0') if s]
[4, 3, 1, 2, 4]
答案 4 :(得分:-6)
>>> s = "000000111100011100001011000000001111"
>>> items = set(s)
>>> counts = [s.count(x) for x in items]
>>> counts
[1, 1]
>>>