Python 对字符串进行分区并每n个字符将其拆分

Python 对字符串进行分区并每n个字符将其拆分,python,python-3.x,Python,Python 3.x,所以我有了这个data=“6060526060…cont”。我想把这根绳子分成4个字符。但是,如果出现数字52,我想把这个数字表示为2个字符。i、 e['6060'、'52'、'6060'] 我目前有: r = [data[i:i+4] for i in range(0, len(data),4)] 这会将其放入每4个字符中,只是在将“52”放入2个seprerate字符时遇到问题,谢谢这是我的解决方案 data="606052606080801010521010" i=0 L = [] w

所以我有了这个
data=“6060526060…cont”
。我想把这根绳子分成4个字符。但是,如果出现数字
52
,我想把这个数字表示为
2个字符
。i、 e
['6060'、'52'、'6060']

我目前有:

r = [data[i:i+4] for i in range(0, len(data),4)]
这会将其放入每4个字符中,只是在将“52”放入2个seprerate字符时遇到问题,谢谢

这是我的解决方案

data="606052606080801010521010"

i=0
L = []
while i<len(data):
    if data[i:i+2] == '52':
        L.append(data[i:i+2])
        i+=2
    else:
        L.append(data[i:i+4])
        i+=4
print(L)
这是我的解决办法

data="606052606080801010521010"

i=0
L = []
while i<len(data):
    if data[i:i+2] == '52':
        L.append(data[i:i+2])
        i+=2
    else:
        L.append(data[i:i+4])
        i+=4
print(L)

您可以查看通过正则表达式拆分:

import re
digits = '6060526060521233'
r = [s for s in re.split('(52|\d{4})', digits) if s]
每次观察到
'52'
或一组四位数字时,都会创建一个新的拆分。输出:

['6060', '52', '6060', '52', '1233']

您可能会看到通过正则表达式进行拆分:

import re
digits = '6060526060521233'
r = [s for s in re.split('(52|\d{4})', digits) if s]
每次观察到
'52'
或一组四位数字时,都会创建一个新的拆分。输出:

['6060', '52', '6060', '52', '1233']

我认为比前面的答案更像是Pythonist:

def iter_data(data, pos=0):
    while pos < len(data):
        if data[pos:pos+2] == "52":
            yield "52"
            pos += 2
        else:
            yield data[pos:pos+4]
            pos += 4

print(list(iter_data(data)))

我认为比前面的答案更像是蟒蛇主义者:

def iter_data(data, pos=0):
    while pos < len(data):
        if data[pos:pos+2] == "52":
            yield "52"
            pos += 2
        else:
            yield data[pos:pos+4]
            pos += 4

print(list(iter_data(data)))

下面是在
while
循环中使用
str.partition
的另一种方法:

将字符串转换为元组,并重复调用最后一个元素的分区。将其余的附加到原始元组:

data="60605260605211110000"
new_data = (data,)
while '52' in new_data[-1]:
    new_data = new_data[:-1] + new_data[-1].partition('52')
print(new_data)
#('6060', '52', '6060', '52', '11110000')
如果您的数据保证每4个字符都被
'52'
分隔,那么您就可以在这里完成(只需将输出转换为列表)。如果没有(如我在示例中所示),则需要完成此输出并拆分长度超过4个字符的字符串:

parts = []
for p in new_data:
    if p == '52' or len(p) <=4:
        parts.append(p)
    else:
        parts.extend([p[i:i+4] for i in range(len(p)//4)])
print(parts)
#['6060', '52', '6060', '52', '1111', '1110']
parts=[]
对于新_数据中的p:

如果p='52'或len(p)这里有另一种方法在
while
循环中使用
str.partition

将字符串转换为元组,并重复调用最后一个元素的分区。将其余的附加到原始元组:

data="60605260605211110000"
new_data = (data,)
while '52' in new_data[-1]:
    new_data = new_data[:-1] + new_data[-1].partition('52')
print(new_data)
#('6060', '52', '6060', '52', '11110000')
如果您的数据保证每隔4个字符用
'52'
分隔,那么您就完成了(只需将输出转换为列表)。如果没有(如我在示例中所示),则需要完成此输出并拆分长度超过4个字符的字符串:

parts = []
for p in new_data:
    if p == '52' or len(p) <=4:
        parts.append(p)
    else:
        parts.extend([p[i:i+4] for i in range(len(p)//4)])
print(parts)
#['6060', '52', '6060', '52', '1111', '1110']
parts=[]
对于新_数据中的p:

如果p=='52'或len(p),如果字符串为'605260',会发生什么?是否可以有多个“52”?是的,字符串中可以有多个“52”&字符串将始终以“6060”开头。您的字符串是否总是10个字符长?如果是这样的话,
list[data.partition('52')]
就是你要找的。字符串不会总是10个字符长,如果字符串是“605260”?是否可以有多个“52”?是的,字符串中可以有多个“52”&字符串总是以“6060”开头?字符串是否总是10个字符长?如果是这样的话,
list[data.partition('52')]
就是你要找的。字符串不会总是10个字符长,因为noOP没有明确指定数字,所以我想补充一点,如果你想对任何4个字符的组进行拆分,你可以将模式修改为
(52 |.{4})
。你可以使用切片来删除不需要的空组。同样重复
{1,4}
将在末尾拾取任何尾随的短组
re.split(“(52 |{1,4})”,digits)[1::2]
OP没有明确指定数字,因此我要补充的是,如果您想在任何一组4个字符上进行拆分,您可以将模式修改为
”(52 |{4})
。您可以使用切片来删除不需要的空组。同样重复
{1,4}
将在末尾拾取任何尾随的短组<代码>重新拆分(“(52 |{1,4})”,数字)[1::2]