Предпочитаемый способ Python получить элемент набора с длиной (/ кардинальность) один, не удаляя его? - PullRequest
1 голос
/ 23 мая 2011

При заданном наборе s , какой из сегментов ниже выглядит лучше?

if len(s) == 1:
    v = s.copy().pop()
    # important stuff using variable v takes place here

или

if len(s) == 1:
    v = s.pop()
    s.add(v)
    # important stuff using variable v takes place here

или

if len(s) == 1:
    for v in s:
        # important stuff using variable v takes place here

Я полагаю, что последний сегмент наиболее эффективен, но не выглядит ли глупо использовать цикл, который на самом деле никогда не цикличен?

Почему у наборов python нет альтернативного метода pop, который не удаляетitem?

Это может показаться тривиальным вопросом, но, поскольку я несколько раз сталкивался с этим сценарием, он превратился в зуд, требующий царапин!

Ответы [ 2 ]

5 голосов
/ 23 мая 2011

Почему в наборах python нет альтернативного метода pop, который не удаляет элемент?

Если вы хотите получить доступ к первому (и единственному) элементу без измененияустановить структуру, использовать итератор:

v = iter(s).next()

Это работает до Python 3. В Python 3 вам нужно использовать встроенную функцию next:

v = next(iter(s))
3 голосов
/ 23 мая 2011

Вы можете присвоить единственный элемент v следующим образом:

(v,) = the_set

Возникает исключение, если the_set не содержит ровно один элемент.

...