Maya Python for循环中无法调整列表项 删除场景对象后更新子节点路径问题
问题核心原因
你原有代码的错误逻辑主要有两点:
- 遍历
listA的过程中直接修改listA本身,会导致遍历跳过部分元素 - 筛选删除对象、更新路径的逻辑放在了循环内部,每次遍历单个对象都会执行一次全量更新,逻辑完全错位
修改后代码
listA = [u'|Trunk|Branch_ext|C', u'|Trunk|Branch_ext', u'|Trunk|Branch|A', u'|Trunk|Branch|B', u'|Trunk|Branch_ext|Branch|D', u'|Trunk|Branch_ext|Branch|E', u'|Trunk'] objToDelete = 'Branch_ext' trashBin = [] # 第一步:先全量筛选所有要删除的节点,不修改原列表 for obj in listA: shortName = obj.split('|')[-1] # 用精确匹配避免误删名称包含关键字的节点 if objToDelete == shortName: trashBin.append(obj) # 第二步:删除待删节点本身 res = list(set(listA) - set(trashBin)) # 第三步:统一修正剩余节点的路径 listAUpd = [] for item in res: # 替换路径中包含待删节点的段落 new_path = item.replace(f'|{objToDelete}|', '|') # 兼容待删节点在路径末尾的极端场景 if new_path.endswith(f'|{objToDelete}'): new_path = new_path[:-len(f'|{objToDelete}')] listAUpd.append(new_path) # 去重得到最终结果 listA = list(set(listAUpd)) print(listA)
运行结果
执行后输出完全符合预期:
['|Trunk|Branch|A', '|Trunk|Branch|B', '|Trunk|Branch|D', '|Trunk|Branch|E', '|Trunk|C', '|Trunk']
内容的提问来源于stack exchange,提问作者Andrew Salov
相关产品推荐
相关产品推荐

