从列表中删除而不影响虚拟变量

时间:2017-11-14 01:52:27

标签: python list loops encryption random

 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)

为什么这段代码不会将输入的每个元素都指向一个唯一且随机的输入元素(作为临时虚拟集)?当只被告知从虚拟集中删除项目时,它似乎从temp和输入中删除了项目。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您正在创建列表的别名而不是它的真实副本: 将extension UICollectionView { func scrollToLastItem(at scrollPosition: UICollectionViewScrollPosition = .centeredHorizontally, animated: Bool = true) { let lastSection = numberOfSections - 1 guard lastSection >= 0 else { return } let lastItem = numberOfItems(inSection: lastSection) - 1 guard lastItem >= 0 else { return } let lastItemIndexPath = IndexPath(item: lastItem, section: lastSection) scrollToItem(at: lastItemIndexPath, at: scrollPosition, animated: animated) } } 替换为temp=inputs

temp=inputs[:]

答案 1 :(得分:1)

您没有复制'输入'当你做“temp = inputs'”时,却要创建一个新变量来访问相同的内容。如果您想要列表的新副本,请使用' temp = inputs [:]'。否则,您只是创建对同一对象的新引用,但不会复制对象本身。

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