比较并获取项目属性

时间:2014-02-19 11:32:43

标签: python compare maya getattr

我的场景中有3个定位器,例如 Locator01 - localScaleY值为1 Locator02 - localScaleY值为2
Locator03 - localScaleY值为3

每个都在localScaleY中有不同的值。我想比较这3个Locators的localScaleY值并抓住最高的值(在这种情况下它将是Locator03)

yMax = []
for yValue in pm.ls('locator*'):
    yMax.append(getAttr (yValue +'.localScaleY'))
    yMaxValue = max(yMax)
    print yMaxValue

基于上面的编码,这是一种可行的写作方式,因为我将比较更多的项目?或许还有更好的方法?

2 个答案:

答案 0 :(得分:3)

构建一个scale / object元组的生成器,并获取它的max。通过将比例放在第一位,max键正确关闭。

locators = ((getAttr(locator+'.localScaleY'), locator) for locator in pm.ls('locator*'))
yMaxValue, locator = max(locators)

一些输出供参考:

>>> list(locators)
# Result: [(1.0, nt.Transform(u'locator01')),
           (2.0, nt.Transform(u'locator02')),
           (3.0, nt.Transform(u'locator03')),
           (1.0, nt.Locator(u'locator0Shape1')),
           (2.0, nt.Locator(u'locator0Shape2')),
           (3.0, nt.Locator(u'locator0Shape3'))] # 
>>> yMaxValue
# Result: 3.0 # 
>>> locator
# Result: nt.Locator(u'locator0Shape3') # 

答案 1 :(得分:0)

虽然mhlester的答案有效,但我没有看到她的原因。我只想max()列表。

maxLoc = max(l.localScaleY for l in locs)
print '{} has the highest value in localScaleY: {}'.format(maxLoc.split('.')[0], maxLoc.get())