【问题标题】:Removing from a list without affecting a dummy variable从列表中删除而不影响虚拟变量
【发布时间】:2018-04-26 20:21:59
【问题描述】:
 from random import choice

inputs=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0']
func={}
code=""
z=len(inputs)
x=z-1
temp=inputs
while x>=0:
    y=choice(temp)
    print(str(x)+"   "+inputs[x]+"   "+y)
    func[inputs[x]]=y
    code=code+inputs[x]+y
    del temp[x]
    x=x-1
    print(temp)
    print(inputs)

为什么这段代码没有将输入的每个元素分配给一个唯一且随机的输入元素(作为临时虚拟集)?当只被告知从虚拟集中删除项目时,它似乎从临时和输入中删除项目。

感谢您的帮助。

【问题讨论】:

  • tempinputs 是同一对象的不同名称。

标签: python list loops encryption random


【解决方案1】:

当您执行“temp=inputs”时,您不会复制“inputs”,而是创建一个新变量来访问相同的内容。如果您想要列表的新副本,请使用“temp = inputs[:]”。否则,您只是创建了对同一对象的新引用,而不是复制对象本身。

您可以在official Python FAQ 中找到更多相关信息。

【讨论】:

    【解决方案2】:

    您正在创建列表的别名,而不是列表的真实副本: 将temp=inputs 替换为temp=inputs[:]

    import random
    
    inputs =  ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0']
    func = {}
    code = ""
    z = len(inputs)
    x = z-1
    temp = inputs[:]    #<-- here
    while x >= 0:
        y = random.choice(temp)
        print(str(x) + "   " + inputs[x] + "   " + y)
        func[inputs[x]] = y
        code = code+inputs[x] + y
        del temp[x]
        x = x - 1
        print(temp)
        print(inputs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-11
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多