При заданном наборе 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, который не удаляет элемент?
Это может показаться тривиальным вопросом, но поскольку я столкнулся с этим сценарием несколько раз, он стал зудом, нуждающимся в царапине!
Вы можете назначить единственный элемент v
следующим образом:
(v,) = the_set
Это вызывает исключение, если the_set
не содержит ровно одного элемента.
Почему у наборов python нет альтернативного метода pop, который не удаляет элемент?
Если вы хотите получить доступ к первому (и единственному) элементу без изменения структуры набора, используйте итератор:
v = iter(s).next()
Это работает до Python 3. В Python 3 вам необходимо использовать встроенную функцию next
:
v = next(iter(s))
some_set[0]
потому что наборы не имеют порядка.
v = next(iter(s))
detly.v, = the_set
.