[英]Is there a way to shuffle a list in python?
我正在尝试使用随机abc进行简单的加密来转换它但是我遇到了随机库的问题。
import random
def random(st = 'i love cats')
abc = 'abcdefghijklmnopqrstuvwxyz'
randomabc = abc
random.shuffle(randomabc)
print(randomabc)
预期输出是ABC的随机顺序,实际输出是错误(由于错误,代码在打印之前停止)
由于abc
是一个不可变的字符串(你不能就地改变它)你不能这样做。
相反,你必须:
将字符串拆分为字符列表。
洗牌那个清单
将字符列表重新加入字符串
import random
abc = 'abcdefghijklmnopqrstuvwxyz'
ls = list(abc)
random.shuffle(ls)
abc = ''.join(ls)
print(abc)
示例输出:
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)
唯一样本,并将它们连接成一个字符串(Thanks @JonClements),但它更适合一次性重新洗牌
print(''.join(random.sample(abc, len(abc))))
正如我在评论中提到的,你应该给你的函数名称与python关键字,导入的模块,类名等不同。尝试将你的方法表random
重命名为random_alphabet
。
import random
def random_alphabet(st = 'i love cats'):
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.