繁体   English   中英

有没有办法在python中洗牌?

[英]Is there a way to shuffle a list in python?

我正在尝试使用随机abc进行简单的加密来转换它但是我遇到了随机库的问题。

  1. 尝试使用人们在StackOverflow上就此问题提出的一些其他答案而没有工作......
  2. 尝试更新pip并尝试更新随机(你不能显然使用pip,因为使用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)

示例输出:

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM