Python remove set from set

Согласно моей интерпретации документации Python 2.7.2 для Built-In Types 5.7 Set Types, должно быть возможно удалить элементы множества A из множества B, передав A в set. remove(elem) или set.discard(elem)

Из документации к 2.7.2:

Обратите внимание, аргумент elem в __contains__(), remove() и discard() методы могут быть набором.

Я интерпретирую это как то, что я могу передать set в remove(elem) или discard(elem) и все эти элементы будут удалены из целевого множества. Я бы использовал это, чтобы сделать что-то странное, например, удалить все гласные из строки или удалить все общие слова из гистограммы частоты слов. Вот тестовый код:

Python 2.7.2 (default, Jun 12 2011, 14:24:46) [M...
Type "help", "copyright", "credits" or "license"
>>> a = set(range(10))
>>> b = set(range(5,10))
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([8, 9, 5, 6, 7])
>>> a.remove(b)
Traceback (most recent call last):
  File "", line 1, in 
KeyError: set([8, 9, 5, 6, 7])
>>> a.discard(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>

Что я ожидаю получить в ответ:

>>> a
set([0, 1, 2, 3, 4])

Я знаю, что могу сделать это с помощью a.difference(b), который возвращает новое множество; или с помощью set.difference_update(other); или с помощью операторов множества a -= b, которые изменяют множество на месте.

Так это ошибка в документации? Может ли set.remove(elem) на самом деле не принимать множество в качестве аргумента? Или в документации говорится о множествах множеств? Учитывая, что difference_update выполняет мою интерпретацию, я предполагаю, что дело обстоит именно так.

Это достаточно неясно?

EDIT После 3 лет дополнительной (несколько профессиональной) работы с python, и будучи недавно привлеченным обратно к этому вопросу, я понял, что теперь то, что я на самом деле пытался сделать, может быть достигнуто с помощью:

>>> c = a.difference(b)
set([0,1,2,3,4])

что и было тем, что я изначально пытался получить.

EDIT. После еще 4 лет разработки на python... Я понял, что эту операцию можно выразить более чисто, используя литералы множеств и оператор -; и что более полно показать, что разность множеств некоммутативна.

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
set([0, 1])
>>> b-a
set([4, 5])

62
задан cod3monk3y 2 March 2019 в 18:37
поделиться