#python #set
#python #набор
Вопрос:
Есть ли в python способ извлекать несколько элементов из набора без цикла for над pop
методом и без преобразования набора в список?
Комментарии:
1. Нет. Почему вы не хотите использовать цикл for? И что вы имели в виду, преобразуя в список?
2. @juanpa.arrivillaga Я могу использовать нарезку, если я преобразую в список, но, по сути, мне все равно понадобится цикл for
3. Просто для ясности: Вы ищете операцию, похожую на
removed = some_set.pop(n)
, которая удаляетn
элементы изsome_set
и сохраняет их вremoved
?4. Серьезно, что не так с
for _ in range(n): myset.pop()
?5. Тогда просто используйте
[myset.pop() for _ in range(n)]
. Если выполнение этого цикла в Python вместо встроенного является узким местом вашего приложения, вам есть о чем беспокоиться.
Ответ №1:
Как насчет этого:
import random
pop_count = 3
original_set -= set(random.sample(original_set, pop_count))
Комментарии:
1. Зачем выборка случайным образом? Набор уже имеет произвольный порядок.
2. @MisterMiyagi Я подумал, что, возможно, «произвольный» может означать неопределенным образом (зависящим от реализации). Что означает,, является ли это случайным или нет, может зависеть от реализации
Ответ №2:
Попробуйте это:
set = {"A", "B", "C", "D"} - {"A", "B"}
Комментарии:
1. Это предполагает, что у меня были бы предопределены «A» и «B», чего я не делаю
2. Итак, как вы решаете, какие элементы вставлять или удалять?
3. в случайном порядке все в порядке. Набор не упорядочен. Я хочу, чтобы 10 случайных элементов выскочили из набора
4. Если это так, я согласен с @juanpa.arrivillaga — я не верю, что вы можете сделать это без использования цикла. Кроме того, рассмотрите возможность использования списка, а не набора, поскольку к нему прикреплен индекс.
5. @OmriShayo но это именно то, что
set.pop()
делает в основном, самый быстрый и простой способ для OP делать то, что они хотят, это[myset.pop() for _ in range(n)]