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]