当深入研究 Python 的 random 模块时,人们可能会偶然发现 random.shuffle( 的令人困惑的行为) )。与预期相反,该函数在表面上对列表进行洗牌后似乎返回了空灵的 None 值。为了解开这个谜团,让我们开始了解 random.shuffle 的内部工作原理。
与返回修改后的数据结构的约定相反,random.shuffle ()选择了一条更加神秘的路径。它默默地改变了它所应用的列表,没有任何其行为的切实证据。这种微妙的改变被称为“就地修改”,是许多修改数据结构的 Python API 方法的标志。因此,random.shuffle() 返回 None,留下一个未经任何明确确认的已洗牌列表。
要见证 random.shuffle() 难以捉摸的工作,请考虑以下内容代码:
x = ['foo', 'bar', 'black', 'sheep'] from random import shuffle random.shuffle(x) print(x)
执行此代码将打印打乱后的列表,显示结果random.shuffle() 的无形劳动。
但是,如果您的愿望不仅仅是见证列表的转变,而是创建一个新的打乱列表,其他途径等着你。 Random.sample() 随时可用,提供了一种生成现有列表的打乱副本的方法,同时保持原始列表不变:
shuffled_x = random.sample(x, len(x))
或者,sorted() 与 random.random() 结合提供另一种通往打乱列表的路线,尽管会产生计算成本:
shuffled_x = sorted(x, key=lambda k: random.random())
这两种方法都会产生列表的打乱副本,允许您在不破坏原始列表的情况下操作新列表。
random.shuffle() 函数的特殊行为一开始可能会引起人们的注意,但了解其就地修改性质并探索替代方法创建新的随机列表使您能够有效地利用其随机魔法。
以上是为什么 Python 的 random.shuffle() 返回 None ?的详细内容。更多信息请关注PHP中文网其他相关文章!