Si j'ai une chaîne et que je veux créer un ensemble contenant initialement seulement cette chaîne, existe-t-il une approche plus pythonique que la suivante?
mySet = set()
mySet.add(myString)
Ce qui suit me donne un ensemble de lettres dans myString
:
mySet = set(myString)
Dans les versions 2.7 et 3.x, vous pouvez utiliser:
mySet = {'abc'}
Par exemple, cette manière simple:
mySet = set([myString])
set_display ::= "{" (expression_list | comprehension) "}"
Exemple:
>>> myString = 'foobar'
>>> s = {myString}
>>> s
set(['foobar'])
>>> s = {'spam'}
>>> s
set(['spam'])
Notez qu'un {}
vide n'est pas une set
, c'est une dict
.
Aide sur set
:
class set(object)
| set() -> new empty set object
| set(iterable) -> new set object
Comme vous pouvez le constater, set()
attend une valeur itérable et les chaînes le sont également, de sorte que les caractères de la chaîne sont convertis en un ensemble.
Mettez la chaîne dans un caractère itérable et passez-la à set()
:
>>> set(('foo',)) #Tuple
set(['foo'])
>>> set(['foo']) #list
set(['foo'])
set(obj)
va effectuer une itération sur obj
et ajouter tous les éléments uniques à l'ensemble. Puisque les chaînes sont également itérables, si vous passez une chaîne à set()
, vous obtenez les lettres uniques de votre jeu. Vous pouvez d'abord mettre votre obj sur une liste:
set(["mystring"])
Cependant, ce n'est pas élégant IMO. Vous savez, même pour la création d'un dictionnaire vide, nous préférons {}
à dict()
. Pareil ici. Je wolud utilise la syntaxe suivante:
myset = {"mystring"}
Notez que pour les tuples, vous avez besoin d’une virgule après celle-ci:
mytuple = ("mystring",)
Si l'ensemble ne risque pas non plus de changer, envisagez d'utiliser une variable frozenset
:
mySet = frozenset([myString])