Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2011 05:00:42

ramses
От:
Зарегистрирован: 2011-04-19
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод pop() множеств

nums = {i for i in range(1, 51)}

for i in range(10):
for j in range(5):
print("{: >3}".format(str(nums.pop())), end="")
print()
Почему выводится по порядку? nums - это же множество. А метод pop() удаляет и выводит случайный элемент. Не пойму.. Версия питона 3.2.1.



Отредактировано (Авг. 16, 2011 05:02:07)

Офлайн

#2 Авг. 16, 2011 05:26:56

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Метод pop() множеств

Это случайность.

nums = set('abcdefgh')
while nums:
print( nums.pop() )
nums = {i for i in range(100000,10000)}
while nums: print( nums.pop() )



Отредактировано (Авг. 16, 2011 05:35:07)

Офлайн

#3 Авг. 18, 2011 03:04:22

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Метод pop() множеств

По всей видимости pop() реализован так, что удаляет и возвращает первый элемент в множестве. А т.к. элементы в множестве хранятся в произвольном порядке(вернее так, как удобнее интерпретатору для выполнения других операций), то и в доках написано что будет возвращен произвольный элемент.

Числа удобно хранить в порядке возрастания.

L = [randrange(1, 100) for i in range(100)]
print('list: ', L)
S = set(L)
print('set: ', S)
Потому и результат такой.

P.S. все это лишь мои предположения, если что прошу более опытных товарищей меня поправить



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version