Python字符串列表替换问题:结果列表数量不符预期的排查
问题分析与解决方法
原脚本的问题在于嵌套循环逻辑错误:你先遍历每个变量,再遍历每个data字符串,只要字符串包含该变量就替换后添加到lis。这会导致一个data字符串如果包含多个变量,就会被多次添加到lis里(比如一个字符串里有4个变量,就会被加4次),最终lis元素数量远超过data的12个。
正确逻辑应该是:遍历每个data字符串,对该字符串一次性完成所有变量的替换,然后将处理后的字符串仅添加到lis一次,这样lis的长度就会和data一致,保持12个元素。
修改后的代码
data = ["int zt;", "public int w = ;", "public final int nu;public a(d dVar, int i, int i2);", "public int getScoreOrder() {int getInteger;", "for (int i = 0; i < this.nu; i++)", "{public a(d dVar, int t) {super(dVar, i);", "private int z = true ;if (getType() != 1) {z = false;", "protected int g = true;", "unprotected int z = true;if (getType() != 1) {z = false;", "public int getType) {return getInteger();", "int y;", "print (int i) {int k = b.k(parcel);"] data_variable = ['zt', 'w', 'nu', 'i2', 'getScoreOrder', 'getInteger', 'i', 't', 'z', 'g', 'z', 'getType', 'y', 'i', 'k'] lis = [] # 去重变量列表 unique_vars = list(set(data_variable)) # 遍历每个data字符串,一次性替换所有目标变量 for d in data: processed_str = d for var in unique_vars: # 若要避免误替换(比如变量"i"不会替换"int"里的"i"),可以用正则匹配完整单词 # import re # processed_str = re.sub(r'\b' + re.escape(var) + r'\b', "data_variable", processed_str) # 不需要严格匹配的话,直接用replace即可 processed_str = processed_str.replace(var, "data_variable") lis.append(processed_str) print(lis) print(f"lis的长度: {len(lis)}") # 输出12,符合预期
补充说明
- 原脚本里的
data_variable = [*set(data_variable)]可以改成unique_vars = list(set(data_variable)),变量名更直观。 - 如果担心
replace会误替换部分字符串(比如变量"i"替换"int"里的"i"),可以用正则的单词边界(\b)确保只匹配完整变量,代码里已注释对应逻辑。
内容的提问来源于stack exchange,提问作者ya xi er
相关产品推荐
相关产品推荐

