有没有一种方法可以在python中随机播放列表?

时间:2019-05-04 11:07:55

标签: python random shuffle

我正在尝试使用随机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的随机顺序 实际输出是一个错误(由于错误,代码在打印之前停止了)

3 个答案:

答案 0 :(得分:1)

由于abc是不可变的字符串(不能就地更改它),所以不能那样做。

相反,您必须:

  1. 将字符串分成字符列表。

  2. 随机播放列表

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

import random

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

print(abc)
  

示例输出:

erbkvownuhcmfljtgqpyiazdxs

:切勿使用与标准库相冲突的名称来命名函数或.py文件。在这种情况下,您的函数与random模块的名称相同,这是一个很大的问题。

答案 1 :(得分:1)

您不能随机播放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))))

答案 2 :(得分:1)

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

import random

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