Python 用不同的变量替换连续的字母
Python Replace consecutive letters with different variables
希望我有一个简单的问题。我只是想不出要使用的正确功能。我想根据连续重复的次数用不同的变量替换重复字符。
with open("text1.txt","r") as File:
for line in File:
Counting = line.count('a')
if Counting == 1:
Line1 = line.replace('a', '1')
print(Line1)
elif Counting == 2:
Line1 = line.replace('aa', '2')
print(Line1)
所以如果 'a' 连续重复 3 次我想用 3 替换 'aaa' 等等直到 9.The 问题是,不管它是否连续,都计算它们.如果我一次读一行 2 个字符或 3 个字符,它就会把它切碎。请有任何想法或帮助。
如果您想要 analyze/replace 连续的字母组,那么 itertools.groupby 可能会很有趣。下面的示例首先提取所有连续的组,然后检查特定组中的唯一元素是否为 a
。如果是,它用相应的元素数替换这个组,否则,它保持原始输入。
from itertools import groupby
s = 'aaabaacdd' #test input
ret = ''
for k, v in groupby(s):
chunk = list(v)
cnt = len(chunk)
if k == 'a': #the condition can be extended here, e.g., k == 'a' and cnt <= 9
#substitute the group of 'a's with something else
#the substitution can take into account the number of consecutive
#'a's stored in the variable cnt
el = '%d' % (cnt)
else:
el = ''.join(chunk)
ret += el
print(ret)
生产
3b2cdd
字符串的简单解决方案(一行)。您可以扩展它以读取文件。
f = 'a b aa b aaa b'
output = f
for i in range(9,0,-1):
output = output.replace('a' * i, str(i))
print(output) # 1 b 2 b 3 b
希望我有一个简单的问题。我只是想不出要使用的正确功能。我想根据连续重复的次数用不同的变量替换重复字符。
with open("text1.txt","r") as File: for line in File: Counting = line.count('a') if Counting == 1: Line1 = line.replace('a', '1') print(Line1) elif Counting == 2: Line1 = line.replace('aa', '2') print(Line1)
所以如果 'a' 连续重复 3 次我想用 3 替换 'aaa' 等等直到 9.The 问题是,不管它是否连续,都计算它们.如果我一次读一行 2 个字符或 3 个字符,它就会把它切碎。请有任何想法或帮助。
如果您想要 analyze/replace 连续的字母组,那么 itertools.groupby 可能会很有趣。下面的示例首先提取所有连续的组,然后检查特定组中的唯一元素是否为 a
。如果是,它用相应的元素数替换这个组,否则,它保持原始输入。
from itertools import groupby
s = 'aaabaacdd' #test input
ret = ''
for k, v in groupby(s):
chunk = list(v)
cnt = len(chunk)
if k == 'a': #the condition can be extended here, e.g., k == 'a' and cnt <= 9
#substitute the group of 'a's with something else
#the substitution can take into account the number of consecutive
#'a's stored in the variable cnt
el = '%d' % (cnt)
else:
el = ''.join(chunk)
ret += el
print(ret)
生产
3b2cdd
字符串的简单解决方案(一行)。您可以扩展它以读取文件。
f = 'a b aa b aaa b'
output = f
for i in range(9,0,-1):
output = output.replace('a' * i, str(i))
print(output) # 1 b 2 b 3 b