Python 中的字符串按索引顺序替换

String replace in Python, in sequence, by index

我是刚开始从 YouTube 学习 Python 的新手。我正在尝试制作一个程序,用新的字符串数字替换旧的字符串数字,并在替换数字时遇到问题。想按索引替换(它的技术术语是什么(我不知道))。它可以朝一个方向或按索引方向移动。

我的字符串是= (01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101)

我想将 010 替换为 0、0110,将 00、01110、000 和 011110 替换为 0000,

所以我替换的 string/output 字符串将是这样的..

(01 0011 0001111 00001111 00001 0011 001 0011 001 01 01 01 01 000111 0111 00001)

根据我的代码,它花费了太多时间(仅 8MB 的文件就花费了近 2-3 小时。

with open('1.txt', 'r') as f:
newstring = ''

old_list = ['010', '0110', '01110', '011110']
new_list = ['0', '00', '000', '0000']

while True:
    try:
        chunk = f.read()

    except:
        print('Error while file opening')
    if chunk:

        n = len(chunk)

        i = 0
        while i < n:
            flag = False
            for j in range(6, 2, -1):

                if chunk[i:i + j] in old_list:
                    flag = True
                    index = old_list.index(chunk[i:i + j])
                    newstring = newstring + new_list[index]

                    i = i + j

                    break
            if flag == False:
                    newstring = newstring + chunk[i]
                    i = i + 1
                    newstring=''.join((newstring))

        else:
            try:
                f = open('2xx.txt', "a")
                f.write("01"+newstring)
                f.close()

            except:
                print('Error While writing into file')

            break

我相信这就是您要找的:

old_str = "01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101"

split_str = old_str.split("0") # split by 0 delimiter
res = ""
for idx, each in enumerate(split_str):
    if idx % 2 != 0: # odd index, turn however many 1's into 0's
        res += "0" * len(each)
    else:
        res += each
print(res)

这是简单的代码,因此不包括任何输入有效性检查,但它展示了基本概念。根据您的 situation/preferences

进行相应编辑