Set.pop () не случайно?
ОтPython Docs, "set.pop () удалить и вернуть произвольный элемент из s ", При генерации случайных данных для тестирования программы я заметил странное поведение этой функции pop (). Вот мой код (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',
print
for percentage in greaterPercentages:
print "{:2.2f}".format(percentage), '\t',
Что я'Я делаю здесь,
Вставка некоторых случайных значений в наборs
где каждый элемент находится в диапазоне [0,)numberRange
Вытолкнуть элемент из набора (согласно документам, он должен быть случайным)Подсчет, сколько элементов в наборе меньше, чем попсовое значениеЯ ожидал, что вытесненное значение должно быть случайным, и около 50% чисел в наборе будет больше, чем вытесненное значение. Но кажется чтоpop()
почти всегда возвращает самое низкое число в наборе. Вот результат дляnumberRange = 500
, Первая строка обозначает значения вытолкнутого элемента. Вторая строка - это процент элементов, которые меньше, чем вытолкнутое значение.
9 0 3 1 409 0 1 2 4 0
0 % 0 % 0 % 0 % 87 % 0 % 0 % 0 % 0 % 0 %
мы провели этот тест с разными значениямиnumberRange
, Кажется, что для более низких значений заданных элементов,pop()
почти всегда возвращает самый низкий элемент. Но для более высоких значений он возвращает случайный элемент. ЗаnumberRange = 1000
результат:
518 3586 3594 4103 2560 3087 4095 3079 3076 1622
7 % 72 % 73 % 84 % 54 % 51 % 79 % 63 % 67 % 32 %
что я думаю довольно случайно. Почему это странное поведение? Я делаю что-то неправильно?
РЕДАКТИРОВАТЬСпасибо всемответ и комментарий, кажется, что "произвольно", это н'Я не гарантирую, что это будетслучайный».