首页 > 解决方案 > Python 的 random.shuffle() 如何在不返回任何内容的情况下更改列表的值,这是任何 Python 编码器都可以做的事情吗?

问题描述

编辑:当我问这个时,我没有正确理解可变和不可变对象的概念,以及指向它们的变量

我只是注意到我没有从 random.shuffle() 获得回报。我意识到这是有道理的,因为除非另有说明,否则您在逻辑上希望使用原始列表。

>>> import string
>>> import random


>>> letters = list(string.ascii_lowercase)

>>> print(letters)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

>>> rand_alpha = random.shuffle(letters)

>>> print(rand_alpha)
None

>>> print(letters)
['f', 'c', 'n', 'u', 'x', 'y', 'q', 'j', 's', 'v', 'w', 'o', 'p', 'z', 't', 'm', 'k', 'd', 'e', 'a', 'g', 'i', 'h', 'l', 'r', 'b']

这让我想知道在另一个范围内更改列表是人们会做的事情(并且应该小心不要意外地做)还是这在 Python 标准库中是特殊的?

我检查了代码 - 并进行了一些搜索 - 但我没有找到任何让我更清楚的东西。

标签: pythonarraysscope

解决方案


有些函数可以就地工作,有些函数会返回它们的结果。对于第二种类型,您必须将它们的返回值分配给某些东西以使用它。

可能最简单\最常见的例子是.sort列表方法和sorted函数;第一个工作很像你shuffle,而第二个返回传递的列表的排序副本。

这有帮助吗?


推荐阅读