随机排列数字、字符和符号列表

Shuffle a list of numbers, character and symbols

我正在创建一个简单的程序来生成密码,密码 'List' 由数字、符号和字符组成。在此过程中,我想对它们进行随机化和洗牌。 我使用 random.shuffle 方法来打乱列表。我的问题(抱歉,Python 很新)- 为什么我们不能将洗牌 activity 的结果存储到变量中。 举个例子。

mylist = ["apple", "banana", "cherry"]
shufflefinal = random.shuffle(mylist)

(为什么我们不能将 random.shuffle(mylist) 存储到变量 shufflefinal 中) 这里的规则是什么?我了解如何获得结果,但想了解差异以及为什么不能通过变量存储和检索结果的逻辑。

您的见解很有价值。

random.shuffle() 函数修改原始列表。这个函数 returns None 所以它不能将修改后的列表存储到 shuffllefinal var.

mylist = ["apple", "banana", "cherry"]
print("Before shuffle: ", mylist)
random.shuffle(mylist)
print("After shuffle: ", mylist)

根据 random.shuffle 上的文档:

Shuffle the sequence x in place.

这意味着作为参数提供的列表发生了变化。它遵循与sort相同的原则,也是in-place。

如果您想保留原始列表不变,请创建一个副本:

mylist = ["apple", "banana", "cherry"]
shufflefinal = mylist[:]  # Get a shallow copy
random.shuffle(shufflefinal)  # Shuffle the copy

上面的文档提到了另一种方式:

To shuffle an immutable sequence and return a new shuffled list, use sample(x, k=len(x)) instead.

所以在你的情况下:

mylist = ["apple", "banana", "cherry"]
shufflefinal = random.sample(mylist, k=len(mylist))