Python 将二进制文件拆分为0和1的组,并获取边界索引
我有一个二进制数,我需要把它分成0和1两组。 我还需要得到每个新组建的团队的开始和结束索引 例如,假设数字为Python 将二进制文件拆分为0和1的组,并获取边界索引,python,regex,split,binary,itertools,Python,Regex,Split,Binary,Itertools,我有一个二进制数,我需要把它分成0和1两组。 我还需要得到每个新组建的团队的开始和结束索引 例如,假设数字为1100111100 我需要将其分组为11,001111,00 现在,每组的开始和结束索引应该如下 11:(1,2)、00:(3,4)、1111:(5,8)和00:(9,10) 我计划使用Python。我研究并发现itertools可以提供帮助,但不确定在itertools中使用哪个函数 非常感谢您的帮助 谢谢请尝试以下方法: import re str = '1100111100' l
1100111100
我需要将其分组为11,001111,00
现在,每组的开始和结束索引应该如下
11:(1,2)、00:(3,4)、1111:(5,8)和00:(9,10)
我计划使用Python。我研究并发现itertools可以提供帮助,但不确定在itertools中使用哪个函数
非常感谢您的帮助
谢谢请尝试以下方法:
import re
str = '1100111100'
l = re.findall('0+|1+', str) # now l = ['11', '00', '1111', '00']
l2 = []
pos = 1
for x in l:
l2.append("%s : (%d,%d)" % (x, pos, pos + len(x) - 1))
pos += len(x)
print(l2)
输出:
['11 : (1,2)', '00 : (3,4)', '1111 : (5,8)', '00 : (9,10)']
这可以用这样的正则表达式在一行中完成
a = "1100111100"
[' : '.join([i.group(),str((i.start()+1,i.end()))]) for i in re.finditer("0+|1+",a)]
芬迪特酒店
返回一个迭代器,为字符串中的RE模式在所有非重叠匹配上生成匹配对象
这意味着在迭代器中返回所有唯一的命中
输出
['11 : (1, 2)', '00 : (3, 4)', '1111 : (5, 8)', '00 : (9, 10)']
使用itertools.groupby:
from itertools import groupby
def func(string):
i = 1
for _, g in groupby(string):
g = ''.join(g)
j = len(g)
yield (i, i+j-1), g
i += j
>>> dict(func('1100111100'))
{(1, 2): '11', (3, 4): '00', (5, 8): '1111', (9, 10): '00'}
要将其用作dict,键必须是结束和开始索引,值是子字符串。如果您不关心效率,那么最简单的策略是转换为字符串,并跟踪更改“1”->“0”一个快速而肮脏的解决方案:b=二进制字符串b_split=b.replace('10','10')。replace('01','01')。split()