Ответ 1
В версии 2.7, а также 3.x вы можете использовать:
mySet = {'abc'}
Если у меня есть строка и вы хотите создать набор, который первоначально содержит только эту строку, существует ли более подход Pythonic, чем следующий?
mySet = set()
mySet.add(myString)
Следующее дает мне набор букв в myString
:
mySet = set(myString)
В версии 2.7, а также 3.x вы можете использовать:
mySet = {'abc'}
Например, этот простой способ:
mySet = set([myString])
set_display ::= "{" (expression_list | comprehension) "}"
Пример:
>>> myString = 'foobar'
>>> s = {myString}
>>> s
set(['foobar'])
>>> s = {'spam'}
>>> s
set(['spam'])
Обратите внимание, что пустой {}
не является set
, его a dict
.
Справка по set
:
class set(object)
| set() -> new empty set object
| set(iterable) -> new set object
Как вы можете видеть, set()
ожидает, что итерабельный, и строки также будут итерабельны, поэтому он преобразует строковые символы в набор.
Поместите строку в некоторая итерабельность и передайте ее в set()
:
>>> set(('foo',)) #tuple
set(['foo'])
>>> set(['foo']) #list
set(['foo'])
set(obj)
собирается перебирать trough obj
и добавлять в набор все уникальные элементы. Поскольку строки также являются итерабельными, если вы передаете строку в set()
, тогда вы получите уникальные буквы в своем наборе. Сначала вы можете поместить свой объект в список:
set(["mystring"])
Однако это не изящная ИМО. Вы знаете, даже для создания пустого словаря мы предпочитаем {}
over dict()
. Тоже самое. Я использую следующий синтаксис:
myset = {"mystring"}
Обратите внимание, что для кортежей вам нужна запятая:
mytuple = ("mystring",)
Если набор также вряд ли изменится, рассмотрите возможность использования frozenset
:
mySet = frozenset([myString])