2024-04-28 13:31:08 发布
网友
我有4万个身份证是字典里的钥匙。我需要洗牌,例如random.shuffle。但我能跳过这一步吗?在
Dictionary并没有按照键的出现顺序来存储键,所以如果我按keys = dict.keys()的顺序存储,那么{}将以非升序的顺序包含这些键。我的程序只运行一次,所以我不关心“置换结果”在执行中是否相同。在
keys = dict.keys()
那么,我能“作弊”并跳过洗牌步骤吗?在
我知道钥匙的顺序是可以预测的。但我要问的是:
由random.shuffle()生成的排列与键的顺序(大体上)相同的几率是多少?
random.shuffle()
详细说明其他人在说什么,以及你为什么需要洗牌。如果你以同样的方式重复初始化你的字典,那么每次的顺序都是一样的。这显然不是随机的。正如Masque所说,它是基于hash的(参见下面的SO问题Why is the order in dictionaries and sets arbitrary?)。在
回答“由随机洗牌()与钥匙的顺序完全相同?”直接:它与洗牌完全相同的几率是1/factorial(len(yourDict));这是因为其中一个置换将导致与初始化时dict相同的顺序。所有其他的顺序都是不同的,并且有factorial(len(yourDict))不同的排列(顺序)可能是由于洗牌而产生的。在
1/factorial(len(yourDict))
factorial(len(yourDict))
希望有帮助!在
不,你不能
如果需要随机性,则不能在将数据输入字典之前或之后跳过洗牌。在
原因是,尽管不能保证字典中键的顺序,但是它们根据条目顺序所采用的顺序具有很强的可预测性。在
字典中的条目是根据键的hash的值来完成的,这是一个非常大的数,将另一个大数模化,从而创建一个有界的值范围。当两个键散列到同一个值时,collision发生;然后将该键放在下一个可用的位置(以确定的方式为准)
hash
collision
[编辑]: 以与哈希桶大致相同的顺序随机获取密钥的机会是。。。不确定。在
详细说明其他人在说什么,以及你为什么需要洗牌。如果你以同样的方式重复初始化你的字典,那么每次的顺序都是一样的。这显然不是随机的。正如Masque所说,它是基于hash的(参见下面的SO问题Why is the order in dictionaries and sets arbitrary?)。在
回答“由随机洗牌()与钥匙的顺序完全相同?”直接:它与洗牌完全相同的几率是
1/factorial(len(yourDict))
;这是因为其中一个置换将导致与初始化时dict相同的顺序。所有其他的顺序都是不同的,并且有factorial(len(yourDict))
不同的排列(顺序)可能是由于洗牌而产生的。在希望有帮助!在
不,你不能
如果需要随机性,则不能在将数据输入字典之前或之后跳过洗牌。在
原因是,尽管不能保证字典中键的顺序,但是它们根据条目顺序所采用的顺序具有很强的可预测性。在
字典中的条目是根据键的
hash
的值来完成的,这是一个非常大的数,将另一个大数模化,从而创建一个有界的值范围。当两个键散列到同一个值时,collision
发生;然后将该键放在下一个可用的位置(以确定的方式为准)[编辑]:
以与哈希桶大致相同的顺序随机获取密钥的机会是。。。不确定。在
相关问题 更多 >
编程相关推荐