Vide de sens littéral?
[]
= vide list
()
= vide tuple
{}
= vide dict
Est là une notation similaire pour un vide set
?
Ou dois-je écrire set()
?
- vous n'acceptez pas {i pour i dans []}, n'est-ce pas?
- Voulons simplement montrer presque tout est possible avec python. Si vous voulez créer un jeu sans l'aide de set(), vous pouvez.
- Ouais, tu peux faire à peu près tout dans une centaine de convulted façons. Je ne suis pas d'ajouter
map(lambda x: x)
à mes exemples de code juste pour vous montrer que cela fonctionne. Ce n'est pas un ensemble littéral aussi bien, c'est juste un ensemble de compréhension. - Il devrait y avoir un, et de préférence seulement une façon évidente de le faire.
- Un muet façon dont les œuvres seraient
{0}-{0}
. Ce n'est pas aussi claire queset()
, mais elle a l'avantage de ressembler à une drôle de paire d'yeux. - Comment cela fonctionne? (Je suis juste curieux, comme je l'ai utilisé à tort
{{}}
pour désigner un videdict(dict())
, et PyCharm il prenait pour un jeu.) {}
est un dictionnaire.{0}
est un ensemble.{0} - {0}
est la différence entre un jeu et lui-même, qui est l'ensemble vide.- Je suis partie à l'
{*''}
, personnellement, si seulement parce qu'elle ressemble à un visage. (Ne l'utilisez pas au sérieux, tout de même!) - Pour une raison quelconque, {*"} tourne plus vite sur mon ordinateur que set()
- Qui semble correct. Les appels de fonction sont assez lent en Python (en grande partie grâce à la pile de manipulation des frais généraux) pour un appel solution est toujours va être plus rapide -- cf.
f{a}'
vsstr(a)
. Le problème avec{*''}
est tout simplement que le gain de vitesse n'est pas vraiment la peine temporairement à confusion tout le monde qui lit votre code (et microoptimizations presque jamais question en Python si vous n'êtes pas déjà en utilisant pypy). - Attention: tout
()
est un n-uplet,('a string')
est une chaîne de caractères. Dans le second, entre parenthèses juste "protéger" le contenu (vous permettant d'écrire des expressions sur plusieurs lignes sans une fuite\
). Initialiser un tuple avec un élément par l'ajout d'une virgule:('a string', )
est un n-uplet de longueur 1.
Vous devez vous connecter pour publier un commentaire.
Non, il n'y a pas la syntaxe littérale de l'ensemble vide. Vous devez écrire
set()
.Juste pour prolonger la accepté de répondre:
À partir de la version
2.7
et3.1
python aset
littérale{}
dans la forme de l'utilisation de la{1,2,3}
, mais{}
est lui-même utilisé pour le vide dict.Python 2.7 (première ligne n'est pas valide en Python <2.7)
Python 3.x
Plus ici: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes
{}.__class__
serait encore donnerdict
Par tous les moyens, veuillez utiliser
set()
pour créer un ensemble vide.Mais, si vous voulez impressionner les gens, leur dire que vous pouvez créer un ensemble vide à l'aide de littéraux et
*
avec Python >= 3.5 (voir PEP 448) en faisant:ce qui est essentiellement une plus condensée façon de faire
{_ for _ in ()}
, mais, ne le faites pas.$ python3.7 -m timeit 'set()' 2000000 loops, best of 5: 177 nsec per loop $ python3.7 -m timeit '{*()}' 2000000 loops, best of 5: 171 nsec per loop
{*()}
semble "intelligent" presque à sens péjoratif du terme.Cela dépend si vous voulez que le littéral pour une comparaison, ou de l'affectation.
Si vous voulez faire un jeu existant vide, vous pouvez utiliser le
.clear()
metod, surtout si vous voulez éviter de créer un nouvel objet. Si vous voulez faire une comparaison, l'utilisationset()
ou vérifier si la longueur est de 0.exemple:
a=set()
n' vider le set, mais crée un nouveau jeu et il l'attribue àa
, en remplaçant la valeur précédente.a.clear()
méthode est légèrement plus rapide quea=set()
, et la vérification delen(a)==0
est légèrement plus rapide que la vérification de l'égalitéa==set()
if len(a)==0:
il suffit (et il est plus Pythonic) pour écrire justeif a:
(edit: ou plutôt,if not a:
de faire correspondre la polarité de la condition).Ajoutant les idées les plus folles: avec Python 3 en acceptant unicode identifiants, vous pouvez déclarer une variable
ϕ = frozenset()
(ϕ est U+03D5) et de l'utiliser à la place.set
objets sont mutables, si vous vous mettez à risque avecspam = ϕ; spam.add("eggs")
.ϕ = frozenset()
permettrait de résoudre ce problème. 🙂ϕ
est un frozenset, puisspam.add("eggs")
échoue, car le frozenset objet n'a aucunadd
méthode.span = ϕ
les deuxspan
etϕ
pointent vers le même objet, c'est à direid(span) == id(ϕ)
. Par conséquent, sispam.add("eggs")
, l'ϕ
objet ne serait pas un ensemble vide, et de plus, nous reviendrons sur le problème d'origine comme indiqué par drdaeman>>> a={} >>> a['foo']='bar' >>> a {'foo': 'bar'}