You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:15:38