2013-11-14 20 views
37

Se si dispone di una stringa e si desidera creare un set che contenga inizialmente solo tale stringa, esiste un approccio più Pythonic rispetto al seguente?Come posso creare un set Python con un solo elemento?

mySet = set() 
mySet.add(myString) 

Di seguito mi dà una serie di lettere in myString:

mySet = set(myString) 

risposta

29

In 2.7 così come 3.x, è possibile utilizzare:

mySet = {'abc'} 
+1

Cosa fa la virgola? anche mySet = {'abc'} sembra funzionare. – Thalecress

+0

In generale, l'espressione 'x,' crea una tupla con un elemento ('x') - è una virgola che crea una tupla, non le parentesi. 'x,' è lo stesso di '(x,)'. –

+1

@TimPeters Sì, ma questo non si applica ai set. –

18

Ad esempio, in questo modo facile:

mySet = set([myString]) 
6

For Python2.7+:

set_display ::= "{" (expression_list | comprehension) "}" 

Esempio:

>>> myString = 'foobar' 
>>> s = {myString} 
>>> s 
set(['foobar']) 

>>> s = {'spam'} 
>>> s 
set(['spam']) 

nota che un vuoto {} non è un set, è un dict.

Guida in set:

class set(object) 
| set() -> new empty set object 
| set(iterable) -> new set object 

Come si può vedere set() si aspetta un iterabile e le stringhe sono iterabile troppo, quindi converte i caratteri della stringa per un set.

inserire la stringa in qualche iterabile e passarlo al set():

>>> set(('foo',)) #tuple 
set(['foo']) 
>>> set(['foo']) #list 
set(['foo']) 
0

Se il set non è destinata a cambiare, è consigliabile utilizzare un frozenset:

mySet = frozenset([myString]) 
1

set(obj) sta per iterare attraverso obj e aggiungere tutti gli elementi unici al set. Poiché anche le stringhe sono iterabili, se passi una stringa a set() ottieni le lettere univoche nel set. Puoi mettere il tuo obj in cima alla lista:

Tuttavia questo non è elegante IMO. Sai, anche per la creazione di un dizionario vuoto preferiamo {} su dict(). Anch'io. Io wolud uso la seguente sintassi:

myset = {"mystring"} 

Si noti che per le tuple, hai bisogno di una virgola dopo esso:

mytuple = ("mystring",) 
Problemi correlati