Maya Python:在for循环时无法调整列表项

2024-10-01 09:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要更新循环中的列表

我在场景中有一些对象,如果它们符合if条件,则需要删除其中的一些对象。这些对象有子对象,我需要从子对象名称中删除最近从场景和列表中删除的对象

例如:

name2-我需要删除的对象

name1|name2|name3-name2的子级

name1|name3-删除name2name3的名称

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']

for obj in listA:
print '================',obj
print 'list length = {}'.format(len(listA))
trashBin = []
listAUpd = []
shortName  = obj.split('|')[-1] # A, B, C, Branch_ext  etc

objToDelete = 'Branch_ext'

# collect match objects to trashBin
if objToDelete in shortName:
    trashBin.append(obj)


if trashBin:
    # remove trashBin items form list_A
    res = list(set(listA) - set(trashBin))
    listA = res

    # remove deleted object names from objects path
    for item in listA:
        if objToDelete in item:
            listAUpd.append(item.replace('|'+ objToDelete + '|', '|' ))
        else:
            listAUpd.append(item)

    listA  =  listAUpd
    print listA

print 'list length = {}'.format(len(listA))

这将返回:
enter image description here

期望值:
enter image description here


Tags: 对象inbranchobjifitemextlist
2条回答

嗯。。看起来您只是想操纵一些字符串。你就不能这样做吗:

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"
listB = []
for element in listA:
    clean = element.replace("|"+objToDelete, "")
    if len(clean) > 0:
        listB.append(clean)

如果您想在循环中完成,有几种方法,但最清晰的方法如下(使用haggi krey的示例,但基于您的预期结果):

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"

for i in range(len(listA)):
    listA[i] = listA[i].replace("|" + objToDelete + "|Branch", "|Branch")

print listA

相关问题 更多 >