我有一些列表列表,它的值可以为空[]或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对象。
答案 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