Извлекать несколько элементов из набора

#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)]