python set 随机_python – Set.pop()不是随机的吗?
從
python docs開(kāi)始,“set.pop()從s中刪除并返回一個(gè)任意元素”.在生成一些隨機(jī)數(shù)據(jù)來(lái)測(cè)試程序時(shí),我注意到這個(gè)pop()函數(shù)的奇怪行為.這是我的代碼(python 2.7.3):
testCases = 10
numberRange = 500
poppedValues = []
greaterPercentages = []
for i in range (testCases):
s = Set()
""" inserting 100 random values in the set, in the range [0, numberRange) """
for j in range (100):
s.add(random.randrange(numberRange))
poppedValue = s.pop()
greaterCount = 0
""" counting how many numbers in the set are smaller then the popped value """
for number in s:
if poppedValue > number:
greaterCount += 1
poppedValues.append(poppedValue)
greaterPercentages.append(float(greaterCount) / len(s) * 100)
for poppedValue in poppedValues:
print poppedValue, '\t',
for percentage in greaterPercentages:
print "{:2.2f}".format(percentage), '\t',
我在這里做的是,
>在集合中插入一些隨機(jī)值,其中每個(gè)元素的范圍為[0,numberRange)
>從集合中彈出一個(gè)元素(根據(jù)文檔,它應(yīng)該是隨機(jī)的)
>計(jì)算集合中的元素?cái)?shù)量小于彈出值
我預(yù)計(jì)彈出的值應(yīng)該是隨機(jī)值,并且集合中大約50%的數(shù)字將大于彈出值.但似乎pop()幾乎總是返回集合中的最小數(shù)字.以下是numberRange = 500的結(jié)果.第一行表示彈出元素的值.第二行是元素的百分比,它小于彈出值.
9 0 3 1 409 0 1 2 4 0
0 % 0 % 0 % 0 % 87 % 0 % 0 % 0 % 0 % 0 %
我用不同的numberRange值進(jìn)行了這個(gè)測(cè)試.似乎對(duì)于set元素的較低值,pop()幾乎總是返回最低元素.但是對(duì)于更高的值,它返回一個(gè)隨機(jī)元素.對(duì)于numberRange = 1000,結(jié)果是:
518 3586 3594 4103 2560 3087 4095 3079 3076 1622
7 % 72 % 73 % 84 % 54 % 51 % 79 % 63 % 67 % 32 %
我覺(jué)得這很隨意.為何這種奇怪的行為?難道我做錯(cuò)了什么?
編輯:感謝大家的回答和評(píng)論,似乎“任意”,它不能保證它是“隨機(jī)的”.
總結(jié)
以上是生活随笔為你收集整理的python set 随机_python – Set.pop()不是随机的吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: D进制的A+B (20)
- 下一篇: 相交链表解法一