有没有办法在python中洗牌列表?
我正试图用一个随机的abc来进行简单的加密转换 但我对随机库有个问题有没有办法在python中洗牌列表?,python,random,shuffle,Python,Random,Shuffle,我正试图用一个随机的abc来进行简单的加密转换 但我对随机库有个问题 在StackOverflow上尝试使用人们在这个问题上询问的一些其他答案,但没有一个有效 尝试更新pip并尝试更新random(显然不能使用pip,因为随机库是用python预先下载的) 在python Shell中尝试了有问题的代码,但仍然存在相同的问题 随机导入 def random(st=‘我爱猫’) abc='ABCDEFGHIjklmnopqrstuvxyz' 随机abc=abc 随机。洗牌(随机ABC) 印刷(AB
随机导入
def random(st=‘我爱猫’)
abc='ABCDEFGHIjklmnopqrstuvxyz'
随机abc=abc
随机。洗牌(随机ABC)
印刷(ABC)
预期输出是ABC的随机顺序
实际输出是一个错误(由于错误,代码在打印之前停止)因为
abc
是一个字符串,它是不可变的(您不能在适当的位置更改它),您不能这样做
相反,你必须:
erbkvownuhcmfljtgqpyiazdxs
另外:切勿使用与标准库冲突的名称命名函数或.py文件。在这种情况下,您的函数与
随机
模块的名称相同,这是一个很大的问题。您不能对字符串
进行无序排列,它是一个不可变的对象,一旦分配就无法更改。
相反,您需要将其转换为一个列表(一个可变对象),对列表进行洗牌,通过该列表将列表洗牌到位,然后将列表转换回字符串
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
.....
除此之外,另一种选择(一行程序)是选择len(abc)
唯一的样本,并将它们连接成一个字符串(感谢@JonClements),但它更适合一次性改组
print(''.join(random.sample(abc, len(abc))))
正如我在评论中提到的,您应该为函数指定不同于python关键字、导入模块、类名等的名称。尝试将方法形式
random
重命名为random\u alphabet
import random
def random_alphabet(st = 'i love cats'):
pass
如果为方法指定与导入的模块相同的名称,它将对模块进行阴影处理。
randomabc=list(abc);随机。洗牌(随机ABC);return”“.join(randomabc)
abc.split()
很可能只返回一个不需要的元素列表。。。另外,random.shuffle
是一个就地操作,返回None
,因此代码实际上是''。加入(None)
,这将不起作用…感谢@JonClements更新了我的答案,并将您称为发起人:)不会说这是一个好的线性表达式。。。如果你只是一次性洗牌的话,这只是一个不错的选择。。。如果你反复洗牌并产生结果或类似结果,那么将其作为一个列表,然后重新洗牌列表会更好。这个答案仍然没有解决字符串不被洗牌的主题@AmitKeren!
import random
def random_alphabet(st = 'i love cats'):
pass