带有空(或无)元素的随机播放列表

时间:2014-05-10 12:54:09

标签: python list python-2.7 shuffle

我有一些列表列表,它的值可以为空[]或NoneType

lst = [[[]], [1, None], 2, [[], 3], 4]

我需要将它们随机化。例如,获取[[1, None], 4, 2, [[], 3], [[]]]

但如果我使用shuffle(lst),我就有例外:

TypeError: 'NoneType' object is not iterable

UPD: 我的错误是我试图把结果变成变量

newLst = shuffle(lst)

这给了NoneType对象。

3 个答案:

答案 0 :(得分:1)

您希望确保在打印或分配之前将其随机播放。

>>> from random import shuffle
>>> lst = [[[]], [1, None], 2, [[], 3], 4]
>>> shuffle(lst)
>>> print(lst)
[2, 4, [[], 3], [1, None], [[]]]

答案 1 :(得分:0)

很高兴您找到了答案(random.shuffle就地修改了列表并返回None) - 但是,如果您希望不修改列表并获得“洗牌”结果,那么:

import random
shuffled = sorted(lst, key=lambda L: random.random())

会为你做那件事。

答案 2 :(得分:0)

来自评论:

问题在于误解了random.shuffle的工作原理。您已尝试迭代返回的值None,因为shuffle不返回任何内容并在其中更改其参数。

以下是解决此问题的方法:

lst = [[[]], [1, None], 2, [[], 3], 4]
shuffle(lst) # Don't capture the return value
# lst is now shuffled and you can put it into `for` loop:
for x in lst:
    # something