有没有办法在python中洗牌列表?

有没有办法在python中洗牌列表?,python,random,shuffle,Python,Random,Shuffle,我正试图用一个随机的abc来进行简单的加密转换 但我对随机库有个问题 在StackOverflow上尝试使用人们在这个问题上询问的一些其他答案,但没有一个有效 尝试更新pip并尝试更新random(显然不能使用pip,因为随机库是用python预先下载的) 在python Shell中尝试了有问题的代码,但仍然存在相同的问题 随机导入 def random(st=‘我爱猫’) abc='ABCDEFGHIjklmnopqrstuvxyz' 随机abc=abc 随机。洗牌(随机ABC) 印刷(AB

我正试图用一个随机的abc来进行简单的加密转换 但我对随机库有个问题

  • 在StackOverflow上尝试使用人们在这个问题上询问的一些其他答案,但没有一个有效
  • 尝试更新pip并尝试更新random(显然不能使用pip,因为随机库是用python预先下载的) 在python Shell中尝试了有问题的代码,但仍然存在相同的问题
  • 随机导入
    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