我正在尝试在python中创建一个列表,其中包含我在Autodesk Maya中选择的元素。但是,当我选择多个元素时,此元素会重复。我认为这是一个非常简单的问题,因为我没有正确循环,然后一个键被多次添加到我的列表中。 如果有更多知识的人可以看看并给我一些建议会很棒! 非常感谢,
琼
items = []
selectedObjects = cmds.ls(sl=True)
strItems = []
for item in selectedObjects:
b = item.encode('utf-8')
strItems.append(b)
for item1 in strItems:
lenItem = len(item1)
lenItemNoGrp = lenItem - 5
lenItemNoGrp2 = lenItem - 6
grp = item1[lenItemNoGrp:lenItem]
grp2 = item1[0:lenItemNoGrp2]
grpName = grp2
if grp == 'group':
items.append({
"type": "maya_file",
"name": shotName + 'V' + versionStr + grpName,
})
else:
None
答案 0 :(得分:0)
每次添加内容时,都会循环遍历strItem的完整内容。假设您选择了obj1和obj2。然后
因此,在这种情况下,迭代canging list可能不是你想要做的。
答案 1 :(得分:0)
看起来你意外缩进了循环。此版本仍然缺少变量shotName
和versionString
,但它不会复制内容
items = []
selectedObjects = cmds.ls(sl=True)
strItems = []
for item in selectedObjects:
b = item.encode('utf-8')
strItems.append(b)
for item1 in strItems:
lenItem = len(item1)
lenItemNoGrp = lenItem - 5
lenItemNoGrp2 = lenItem - 6
grp = item1[lenItemNoGrp:lenItem]
grp2 = item1[0:lenItemNoGrp2]
grpName = grp2
if grp == 'group':
items.append({
"type": "maya_file",
"name": shotName + 'V' + versionStr + grpName,
})
但是,您可以通过多种方式简化此操作。
endswith
这会让你失望:
group_nodes = [item.encode('utf-8') for item in cmds.ls(sl=True) if item.endswith('group')]
entries = [{
'type':'maya_file',
'name': "{0}V{1}{2}".format(shotName, versionStr, entry[:-5])
}
for entry in group_nodes]