ajouter vs mise à jour dans l'ensemble des opérations en python
Quelle est la différence entre les ajouter et les opérations de mise à jour en python si je veux juste ajouter une valeur unique à l'ensemble.
a = set()
a.update([1]) #works
a.add(1) #works
a.update([1,2])#works
a.add([1,2])#fails
Quelqu'un peut m'expliquer pourquoi est-ce si.
- Quelle est la version de Python que vous utilisez? Pour
a.update(1)
j'attendsTypeError: 'int' object is not iterable
, et il a obtenu pour les deux versions, j'ai essayé. - votre modifier changé la question tout à fait un peu
- github.com/python/cpython/blob/master/Objects/setobject.c
- L'OP a mentionné que
#fails
et#works
. J'ai juste compris le réel les messages d'erreur. Espérons que c'est très bien. - à l'origine, l'OP a dit
a.update(1)
travaillé - Nous savons tous les deux que ça ne marchera pas. Pouvons-nous accepter que c'est juste un copier/coller de l'erreur? Si non, n'hésitez pas à revenir ma version 🙂
- eh bien, je pense que si il y avait un copier coller de l'erreur, il aurait été
a.update(1)
était censé êtrea.update([1])
qui aurait plus de sens. - oui, c'était un copier coller d'erreur sur ma fin
- Là.. je annuler les changements. J'ai vraiment pensé qu'elle aurait plus de sens pour les lecteurs si ils ont vu les messages d'erreur.
- Pourriez-vous revenir à l'annulation de la pls. C'était un copier coller d'erreur sur ma fin.
- vous pouvez modifier à votre question. Est-il censé être
update([1])
ouupdate(1)# fails
? - J'ai présumé qu'elle était peut-être censé avoir été
update([1])
qui veut dire que vous pouvez ajouter un élément unique avec mise à jour, mais ne pas ajouter de multiples éléments à ajouter. - Ah ouais... ça fait plus de sens.
Vous devez vous connecter pour publier un commentaire.
set.ajouter
set.add
ajoute un élément à l'ensemble. Donc,fonctionne, mais il ne peut pas travailler avec un objet iterable, sauf s'il est hashable. C'est la raison pour laquelle
a.add([1, 2])
échoue.Ici,
[1, 2]
est considérée comme l'élément est ajouté à l'ensemble et que le message d'erreur dit, une liste ne peut être haché mais tous les éléments d'un ensemble sont censés être hashables. Citant le la documentation,set.mise à jour
En cas de
set.mise à jour
, vous pouvez passer plusieurs iterables d'elle et elle va se répéter tous les iterables et comprendre les différents éléments du jeu. Rappelez-vous: Il ne peut accepter que des iterables. C'est pourquoi vous obtenez une erreur lorsque vous essayez de mettre à jour avec1
Mais, la suite serait de travailler parce que la liste
[1]
est itéré et les éléments de la liste sont ajoutés à l'ensemble.set.update
est en fait un équivalent de en place le jeu de l'union de l'opération. Considérons les cas suivantsIci, nous avons explicitement convertir tous les iterables à des ensembles et ensuite, nous trouvons l'union. Il y a plusieurs intermédiaires, des ensembles et des syndicats. Dans ce cas,
set.update
est une fonction d'assistance. Depuis qu'il accepte n'importe quel itérable, vous pouvez simplement fairemy_set.update(*[s for s in iterable])
, le passage d'un générateur comme dansmy_set.update(s for s in iterable)
sera mise à jour de l'ensemble avec les éléments de l'objet iterable et le souffle, si ces éléments ne sont pas hashableadd
est plus rapide pour un seul élément, car c'est exactement à cette fin, l'ajout d'un seul élément:update
s'attend à un objet iterable ou iterables donc si vous avez un seul hashable élément à ajouter ensuite utiliseradd
si vous avez un objet iterable ou iterables de hashable éléments à ajouter l'utilisationupdate
.update
est beaucoup plus rapide pour l'ajout de nombreux éléments à la fois:timeit a.update( range(10000) ) # => 1000 loops, best of 3: 431 µs per loop
, en attendanttimeit for i in range(10000): a.add(i) # => 1000 loops, best of 3: 1.18 ms per loop
add
ajoute un élément,update
"ajoute" un autre objet iterableset
,list
outuple
, par exemple:.add()
est prévu pour une seuleelement
, tandis que.update()
est pour l'introduction d'autres jeux.De l'aide():
add
accepte uniquement un hashable type. Une liste n'est pas hashable.a.update(1)
dans votre code ne fonctionne pas.add
accepte un élément et de le mettre dans le jeu si ce n'est pas déjà là, maisupdate
prend un objet iterable et rend une les syndicats de l'ensemble avec qui itératif. C'est un peu commeappend
etextend
pour les listes.Je suppose que personne n'a mentionné à propos de la bonne ressource de Hackerrank. Je voudrais coller comment Hackerrank mentionne la différence entre mise à jour et d'ajouter pour définir en python.
Ensembles sont non ordonnée sac de valeurs uniques. Un ensemble unique contient des valeurs immuables type de données.
CRÉATION D'
La MODIFICATION de JEU - ajouter() et update()
Espère que cela aide. Pour plus de détails sur Hackerrank, voici le lien.
méthode add ajoute directement les éléments de l'ensemble, tandis que la méthode de mise à jour convertit premier argument dans l'ensemble, puis il ajoute
la liste est hashable par conséquent, nous ne pouvons pas ajouter un hashable liste de unhashable ensemble.