Как извлечь элемент из набора, не удаляя его? - PullRequest
338 голосов
/ 12 сентября 2008

Предположим следующее:

>>> s = set([1, 2, 3])

Как получить значение (любое значение) из s без выполнения s.pop()? Я хочу оставить элемент в наборе, пока не буду уверен, что смогу удалить его - в этом я могу быть уверен только после асинхронного вызова другого хоста.

Быстро и грязно:

>>> elem = s.pop()
>>> s.add(elem)

Но знаете ли вы лучший способ? В идеале в постоянное время.

Ответы [ 11 ]

0 голосов
/ 13 сентября 2008

Другой вариант - использовать словарь со значениями, которые вам не нужны. Например.,


poor_man_set = {}
poor_man_set[1] = None
poor_man_set[2] = None
poor_man_set[3] = None
...

Вы можете рассматривать ключи как набор, за исключением того, что они являются просто массивом:


keys = poor_man_set.keys()
print "Some key = %s" % keys[0]

Побочным эффектом этого выбора является то, что ваш код будет обратно совместим со старыми, до set версиями Python. Возможно, это не самый лучший ответ, но это другой вариант.

Редактировать: Вы даже можете сделать что-то подобное, чтобы скрыть тот факт, что вы использовали dict вместо массива или набора:


poor_man_set = {}
poor_man_set[1] = None
poor_man_set[2] = None
poor_man_set[3] = None
poor_man_set = poor_man_set.keys()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...