所以我有data="6060526060....cont"
。我想将这个字符串分成每4个字符。但如果出现52
号码,我想为2 chars
吐出这个号码。即['6060', '52', '6060']
。
我目前有:
r = [data[i:i+4] for i in range(0, len(data),4)]
这将它放入每4个字符中,只是难以将“52”变成2个高级字符,谢谢
答案 0 :(得分:5)
这是我的解决方案
void Medicine::createFile()
{
std::ofstream medicine_file(file_name);
if (!medicine_file.is_open())
std::cout << "file is not opening\n";
medicine_file.close();
}
输出
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)
答案 1 :(得分:4)
您可能会考虑拆分正则表达式:
import re
digits = '6060526060521233'
r = [s for s in re.split('(52|\d{4})', digits) if s]
每次'52'
或一组四位数时,都会创建一个新的分割。输出:
['6060', '52', '6060', '52', '1233']
答案 2 :(得分:2)
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)))
输出:
['6060', 52, '6060', '8080', '1010', 52, '1010']
答案 3 :(得分:0)
以下是在str.partition
循环中使用while
的另一种方式:
将字符串转换为元组,并在最后一个元素上重复调用分区。将其余部分附加到原始元组:
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个char字符串:
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']