我试图找到两个列表之间的区别 - charLs和rigLs,但是当我尝试使用列表并设置我在网上找到的方法时,它给了我非常不同的结果。
在下面的例子中,我应该在diff1结果中看到female01和elderly01但是我得到了male01 即使在我转换到集合时,就像在diff2中一样,这一次它给出了场景中3个装备的列表。
尝试了list(set(..)^set(..))
并使用了difference
以及类似[x for x in rigLs if x not in charLs]
之类的内容,但仍无效。
不确定这是否是因为使用内部模块创建的装备(|SceneGrp|characterRig
下的装备)以及涉及listRelatives的部分正在发出问题
我可以通过其他方式获得差异吗?
pubObj = cmds.ls(type = "publishedRef")
rigLs = []
for item in pubObj:
nameSplit = item.split(':')
rigLs.append(nameSplit[0])
grpNode = cmds.ls("SceneGrp", type=grpNode.name())
check = cmds.objExists("|SceneGrp|characterRig")
charLs = cmds.listRelatives("|SceneGrp|characterRig", c=True)
# Assumingly the following are the items appended into the list
# rigLs : [u'male01', u'female01', u'elderly01']
# charLs :[u'male01']
diff1 = list(set(charLs)-set(rigLs))
# Results : [u'male01']
diff2 = list(set(rigLs)-set(charLs))
# Results : [u'male01', u'female01', u'elderly01']
答案 0 :(得分:0)
以下略有优化,以便我们只在第二个列表的元素上创建一次
In [64]: l1 = [0,1,2,3,4,5,6,7,8,9]
In [65]: l2 = [8,3,6]
In [66]: [elt for l2s in [set(l2)] for elt in l1 if elt not in l2s]
Out[66]: [0, 1, 2, 4, 5, 7, 9]
In [67]:
执行相同操作的功能
def l1_minus_l2(l1, l2):
return [elt for l2s in [set(l2)] for elt in l1 if elt not in l2s]
如果您更喜欢返回迭代器
def l1_minus_l2(l1, l2):
return (elt for l2s in [set(l2)] for elt in l1 if elt not in l2s)