2011-08-09 39 views
3

我有一个需要分配随机顺序的对象集合。我写了一个非常笨的java风格的循环来做到这一点,但是为了达到同样的效果,更奇特的pythonic方法是什么?Pythonic设置排序顺序的方法?

from random import shuffle 

class pair(object): 
    def __init__(self, name): 
     self.name = name 
     self.order = 0 
    def __repr__(self): 
     return self.name + " order: " + str(self.order) 

test =[pair('a'),pair('b'),pair('c'),pair('d')] 
print(test) 
#shuffle the list 
shuffle(test) 
i = 1 
#this is what i want to replace <------ 
for t in test: 
    t.order=i 
    i+=1 

print(test) 

输出示例:

>>>[a order: 0, b order: 0, c order: 0, d order: 0] 
>>>[c order: 1, a order: 2, d order: 3, b order: 4] 

回答

6

这是比你更简单的还不是很多,但它也许是一点点整洁:

for i, t in enumerate(test): 
    t.order = i 
+2

+1这个是更pythonic,唯一我必须做的事情是添加一个'开始'1所以'列举(测试,1)' – Nix

0
[ x.order = o for o, x in enumerate(test) ] 
+0

为什么使用列表理解,如果你只是要扔掉结果?一个简单的'for'循环会更具可读性。 –