我如何洗牌对象列表?我尝试了random.shuffle:

import random

b = [object(), object()]

print(random.shuffle(b))

但它输出:

None

当前回答

from random import random
my_list = range(10)
shuffled_list = sorted(my_list, key=lambda x: random())

对于希望交换排序函数的某些应用程序,这种替代方法可能很有用。

其他回答

'print func(foo)'将在使用'foo'调用时打印'func'的返回值。 然而,'shuffle'的返回类型是None,因为列表将在适当的位置被修改,因此它不打印任何内容。 处理:

# shuffle the list in place 
random.shuffle(b)

# print it
print(b)

如果你更喜欢函数式编程风格,你可能想要制作以下包装器函数:

def myshuffle(ls):
    random.shuffle(ls)
    return ls

文档为随机。Shuffle声明它会

打乱序列x的位置。

不要做:

print(random.shuffle(xs))  # WRONG!

相反,做:

random.shuffle(xs)
print(xs)
import random
class a:
    foo = "bar"

a1 = a()
a2 = a()
b = [a1.foo,a2.foo]
random.shuffle(b)

确保您没有将源文件命名为random.py,并且在您的工作目录中没有一个名为random.pyc的文件。这两种情况都可能导致程序尝试导入本地random.py文件,而不是python的random模块。

它工作得很好。我在这里尝试用函数作为列表对象:

    from random import shuffle

    def foo1():
        print "foo1",

    def foo2():
        print "foo2",

    def foo3():
        print "foo3",

    A=[foo1,foo2,foo3]

    for x in A:
        x()

    print "\r"

    shuffle(A)
    for y in A:
        y()

它打印出: Foo1 foo2 foo3 Foo2 foo3 foo1 (最后一行的傻瓜是随机排列的)