有没有办法在 python 中打乱列表?

Is there a way to shuffle a list in python?

我正在尝试使用随机 abc 进行简单加密以将其转换 但是我在使用 Random 库时遇到了问题。

  1. 尝试使用人们在 Whosebug 上就此问题提出的一些其他答案,none 奏效了...
  2. 尝试更新 pip 并尝试更新 random(你显然不能使用 pip,因为 Random 库预下载 python) 在 python Shell 中尝试了有问题的代码,但仍然是同样的问题...
import random
def random(st = 'i love cats')
    abc = 'abcdefghijklmnopqrstuvwxyz'
    randomabc = abc
    random.shuffle(randomabc)
    print(randomabc)

预期输出是 ABC 的随机顺序 实际输出是一个错误(由于错误,代码在打印之前停止)

因为 abc 是一个字符串,它是不可变的(你不能就地改变它)你不能那样做。

相反,您必须:

  1. 将字符串拆分为字符列表。

  2. 随机播放该列表

  3. 将字符列表加入字符串

import random

abc = 'abcdefghijklmnopqrstuvwxyz'
ls = list(abc)
random.shuffle(ls)
abc = ''.join(ls)

print(abc)

Example output:

erbkvownuhcmfljtgqpyiazdxs

另外:永远不要使用与标准库名称冲突的函数或 .py 文件命名。在这种情况下,您的函数与 random 模块同名,这是一个大问题。

您不能随机播放 string,它是一个不可变的对象,一旦分配就无法更改。 相反,您需要将其转换为列表(可变对象),通过 random.shuffle 对列表进行随机播放,从而就地对列表进行随机播放,然后将列表转换回字符串。

import random

abc = 'abcdefghijklmnopqrstuvwxyz'

#Convert string to list
li = list(abc)

#Shuffle the list inplace
random.shuffle(li)

#Convert list to string
print(''.join(li))

输出将是

dpfozwhyxalebnqrmstcjvuigk
qgjefyrahobpnxtzmsdkwivlcu
nchkriewsuxdzyjfgvpblomtqa
.....

除此之外,另一种选择(单行)是使用 random.sample 来挑选 len(abc) 个独特的样本,并将它们全部加入一个字符串中(感谢@JonClements)但是更适合一次性改组

print(''.join(random.sample(abc, len(abc))))

正如我在评论中提到的,你应该给你的函数名称不同于 python 关键字、导入模块、class 名称等。尝试将你的方法形式 random 重命名为random_alphabet.

import random

def random_alphabet(st = 'i love cats'):
    pass