从random.sample列表输入不同的属性值

从random.sample列表输入不同的属性值,random,attributes,maya,uniform,Random,Attributes,Maya,Uniform,所以这就是我要做的,我不知道怎么做,因为我是python新手。我已经搜索了一些选项,但我不确定这为什么不起作用 我有6个不同的节点,在maya中,叫做aiSwitch。我需要生成从0到6的随机不同数字,并将该值输入aiSiwtch*.index 简言之,结果应该是 aiSwitch1.index=(从0到5的随机数) aiSwitch2.index=(另一个0到5之间的随机数与之前的不同) 等等unil aiSwitch6.index 我尝试了以下方法: import maya.cmds as

所以这就是我要做的,我不知道怎么做,因为我是python新手。我已经搜索了一些选项,但我不确定这为什么不起作用

我有6个不同的节点,在maya中,叫做aiSwitch。我需要生成从0到6的随机不同数字,并将该值输入aiSiwtch*.index

简言之,结果应该是 aiSwitch1.index=(从0到5的随机数) aiSwitch2.index=(另一个0到5之间的随机数与之前的不同) 等等unil aiSwitch6.index

我尝试了以下方法:

import maya.cmds as mc
import random

allswtich = mc.ls('aiSwitch*')
    for i in allswitch:
    print i
    S = range(0,6)
    print S
    shuffle = random.sample(S, len(S))
    print shuffle
    for w in shuffle:
        print w
        mc.setAttr(i + '.index', w)
这是我从指纹中得到的结果:

aiSwitch1 <-- from print i
[0,1,2,3,4,5] <--- from print S
[2,3,5,4,0,1] <--- from print Shuffle (random.sample results)
2
3
5
4
0
1  <--- from print w, every separated item in the random.sample list.
所有其他的aiSwitch*.index总是只取列表中的最后一项,但我要做setAttr的时间除外。似乎w保留了for循环的最后一个值。我不太明白该怎么做

  • 获取0到5之间的随机值

  • 在aiSwitch1.index中输入该值

  • 获取另一个0到6之间的随机值,该值与之前的值不同

  • 在aiSwitch2.index中输入该值

  • 重复此步骤,直到5.index

  • 我确实使用了以下表格:

     allSwitch = mc.ls('aiSwitch')
     for i in allSwitch:
         mc.setAttr(i + '.index', random.uniform(0,5))
    
    这为所有aiSwitch*.index提供了一个从0到5的随机数,但其中一些会重复。我认为这是可行的,因为每次循环运行时都会生成值,因此使用随机数设置属性。但这些数字重复出现,我试图避免这种情况。我还尝试了一次洗牌,但没有从中获得任何值

    我的主要错误似乎是,我正在生成一个列表并对其进行采样,但我未能将该列表中的每个不同项分配给不同的aiSwitch*.index节点。我已经没有办法了

    任何线索都将不胜感激。 谢谢
    Jonathan。

    这里有一种有点类似于Python的方法:将索引列表洗牌,然后使用
    zip
    对其进行迭代(这对于并行迭代结构非常有用,这是您在这里需要做的):


    线索:
    random.洗牌
    列表
    [0,1,2,3,4,5]
    嗨!谢谢你的提示。你的意思是在代码的最后一个结构中添加洗牌吗?再次感谢!在做任何其他事情之前,只需对列表进行一次彻底的洗牌,然后循环使用洗牌后的值,根据需要使用它们。这一点似乎不起作用。循环遍历这些值,因为无论我之前做了什么,采样、洗牌或只是一个范围,我都会从列表中指定最后一个值。不过,非常感谢你提供的线索。这确实有效!谢谢你,伙计。代码中唯一缺少的是aiSwitch后面的*(只是说万一有人为了自己的目的修改代码)。似乎zip功能正是我所需要的。非常感谢你的帮助。谢谢@Jonathan我在问题的底部写下了你的代码片段,不过我现在要编辑它。如果答案充分回答了问题,您可以将其标记为“已接受”。完成!再次感谢约翰!
     allSwitch = mc.ls('aiSwitch')
     for i in allSwitch:
         mc.setAttr(i + '.index', random.uniform(0,5))
    
    import random
    
    index = list(range(6))
    random.shuffle(index)
    
    allSwitch = mc.ls('aiSwitch*')
    for i,j in zip(allSwitch,index):
        mc.setAttr(i + '.index', j)