Подтвердить что ты не робот

Как создать набор Python только с одним элементом?

Если у меня есть строка и вы хотите создать набор, который первоначально содержит только эту строку, существует ли более подход Pythonic, чем следующий?

mySet = set()
mySet.add(myString)

Следующее дает мне набор букв в myString:

mySet = set(myString)
4b9b3361

Ответ 1

В версии 2.7, а также 3.x вы можете использовать:

mySet = {'abc'}

Ответ 2

Например, этот простой способ:

mySet = set([myString])

Ответ 3

Для Python2.7 +:

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

Ответ 4

set(obj) собирается перебирать trough obj и добавлять в набор все уникальные элементы. Поскольку строки также являются итерабельными, если вы передаете строку в set(), тогда вы получите уникальные буквы в своем наборе. Сначала вы можете поместить свой объект в список:

set(["mystring"])

Однако это не изящная ИМО. Вы знаете, даже для создания пустого словаря мы предпочитаем {} over dict(). Тоже самое. Я использую следующий синтаксис:

myset = {"mystring"}

Обратите внимание, что для кортежей вам нужна запятая:

mytuple = ("mystring",)

Ответ 5

Если набор также вряд ли изменится, рассмотрите возможность использования frozenset:

mySet = frozenset([myString])