混洗列表后打印出意外的"无"


from random import *
day = list(range(1, 29))
day = day[3:29]
shuffleday = shuffle(day)
print(shuffleday)

结果是None。怎么了?

random.shuffle不返回任何内容。它修改输入列表。

import random
day=list(range(1,29))
print(day)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]
day=day[3:29]
print(day)
# [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]
shuffleday=random.shuffle(day)
print(shuffleday)
# None
print(day)
# [27, 9, 14, 15, 7, 17, 28, 10, 23, 21, 16, 12, 6, 11, 22, 25, 24, 20, 5, 19, 13, 4, 18, 8, 26]

random.shuffle修改day。它不会返回任何内容。

这是Python中的惯例,其中修改给定参数的函数返回None

如果您希望生成一个新的列表shuffled,而不修改原始列表,您可能希望使用random.sample

from random import *
day = list(range(1, 29))
shuffleday = sample(day[3:29], len(day2))
print(shuffleday)

如果您只是想从列表中获得一个随机元素,则可以使用random.choice

from random import *
day = list(range(1, 29))
randomday = choice(day[3:29])
print(randomday)

要从日期列表中获取随机数,请使用choice而不是shuffle,它将从day[3:29]:返回随机元素的值

from random import *
day = list(range(1, 29))
day = day[3:29]
shuffleday = choice(day)
print(shuffleday)

shuffleday的值为None,因为shuffle函数不返回新列表,它只是更改作为参数提供的列表中元素的顺序。

这将返回一个随机数的值。选择一个:

shuffleday = choice(range(3,29))

shuffleday = randint(3,29)

shuffleday = randrange(3,29)

事实上,shuffle函数不会返回任何内容,它会将元素打乱(在day中(。

尝试print(day)而不是

random.shuffle在适当的位置修改列表,它不返回值。这样你就可以用替换倒数第二行

shuffle(day)

然后简单地打印shuffle而不生成新变量。

此外,我想说,最好只从random导入您需要的内容,而不是进行*导入并弄乱您的命名空间(尤其是考虑到您是该语言的新手,不太可能知道随机库中每个函数的名称(。在这种情况下,你可以做:

from random import shuffle

最新更新