Comments on: Ce que vous ne saviez pas sur les collections en Python http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/ Du code, du cul Sat, 07 Nov 2015 11:08:18 +0000 hourly 1 http://wordpress.org/?v=4.1 By: Olygrim http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-160384 Wed, 06 May 2015 21:09:30 +0000 http://sametmax.com/?p=1101#comment-160384 Pour l’un des exercice du site CheckiO, j’ai utilisé la méthode intersection() des set() pour récupérer la chaîne commune à deux itérables (pour faire simple). Et seule la première lettre de cette chaîne était à renvoyée. Or cette méthode renvoie un set, et je n’ai pas réussi à récupérer ma chaîne autrement qu’en la transformant en tuple.

]]>
By: Sam http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-160381 Wed, 06 May 2015 20:58:37 +0000 http://sametmax.com/?p=1101#comment-160381 Je ne suis pas certain de comprendre le cas d’utilisation. Quand tu mets les choses dans un set, tu as déjà accès à cette chose non ?

]]>
By: Olygrim http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-160379 Wed, 06 May 2015 20:52:54 +0000 http://sametmax.com/?p=1101#comment-160379 Salut,

C’est marrant car je me sers pas mal des set(), mais surtout pour des opérations de suppression de doublons ou pour savoir s’il existe des valeurs communes entre 2 itérables. Et là une grosse colle: Comment accède-t-on à un élément particulier d’un set?

La seule solution que j’ai trouvé c’est de le convertir en tuple (ou autre). Je trouve ça un peu bourrin, mais j’ai pas réussi à trouver d’autres solutions.

Et Merci :) Grâce à vous j’ai découvert l’objet Counter() et sa simplicité pour compter les éléments d’un itérable. Reste plus qu’à m’en souvenir lorsque j’en aurais besoin ;)

]]>
By: Sam http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-59271 Wed, 18 Jun 2014 00:49:46 +0000 http://sametmax.com/?p=1101#comment-59271 @Dam’s:

Feature.

La fonction set() et la notation litérale {} ne font pas la même chose, et n’ont pas le même usage.

Ce n’est pas un piège. Dans les tutos, pour des raisons de simplification, les gens montres les deux comme étant pareil, mais c’est faux.

On va utiliser le litéral pour construire statiquement, à la main, un set. On va utiliser la fonction pour crée dynamiquement un set.


Set()
accepte n’importe quel itérable (une string, une liste, un tuple, un fichier, un générateur, etc, ce qui te permet de construire un tuple à partir d’une séquence ou d’une coroutine sans avoir à faire une boucle for :

>>> set(range(10))
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> set((x + x for x in 'azerty'))
set(['aa', 'rr', 'ee', 'tt', 'yy', 'zz'])
>>> set(open('/etc/fstab'))
set(['#\n', 'UUID=4c0455fb-ff57-466a-8d1f-22b575129f4f none            swap    sw              0       0\n', '...'])

Si je voulais faire pareil avec le litéral, je devrais faire une boucle for à chaque fois. Or en Python, on utilise beaucoup l’itération, donc le langage fournit des raccourcis partout la facilité.

Règle donc : utiliser les littéraux quand on veut écrire vite, utiliser les fonctions quand on veut générer facilement.

]]>
By: kontre http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-59032 Tue, 17 Jun 2014 21:24:19 +0000 http://sametmax.com/?p=1101#comment-59032 C’est vicieux mais ça a une certaine logique: la fonction set (et list tout pareil) prend un itérable en entrée et construit un objet set à partir de ses éléments.
C’est un bug si tu travailles avec des mots et une feature si tu travailles avec des lettres !

Ce genre de trucs est gênant pour les arguments d’entrée, quand tu peux accepter soit une string soit une liste de string, il faut utiliser isinstance(). Et si on veut rester compatible ptyon2 et python3, isinstance avec des strings est bien chiant.
C’est à tel point qu’il y a des propositions sur la liste de développement python pour rentre les strings non itérables.

]]>
By: Dam's http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-58868 Tue, 17 Jun 2014 19:11:00 +0000 http://sametmax.com/?p=1101#comment-58868 Et le piège à con :


>>> set('123') == {'123'}
False
>>> set('123')
set(['1', '3', '2'])
>>> {'123'}
set(['123'])

Bug or feature ?

]]>
By: Lujeni http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-5758 Wed, 30 Jan 2013 22:46:20 +0000 http://sametmax.com/?p=1101#comment-5758 Super Article ! Merci pour l’info sur le module collections qui va remplacer mes compteurs dico fait à la main :)

]]>
By: Etienne http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-2822 Fri, 02 Nov 2012 15:22:45 +0000 http://sametmax.com/?p=1101#comment-2822 Sympa tout ça!

Intéressant aussi le “Code like a pythonista”. C’est le genre de trucs bien utiles pour un autodidacte.

Merci les gars.

]]>
By: Sam http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-729 Fri, 20 Jul 2012 20:52:16 +0000 http://sametmax.com/?p=1101#comment-729 @Luigi: tout ce qu’il y a sur le blog vise uniquement Python 2.7. En effet malgré le temps qui passe, Mac est toujours sous Python 2.6, Ubuntu sous 2.7, et la plupart des serveurs Web sous 2.6 (avec Max on a encore des vieilles cent os avec la 2.4 dans les dépots, obligés de compiler la 2.6 à la mano). Parler de la V3 n’est pas un bon investissement de temps: ceux qui l’utilisent savent généralement ce qu’ils font car il faut vraiment avoir un use case très précis vu qu’on peut encore rien faire avec (la plupart des bonnes libs ne sont pas encore portées).

@Xavier: faudrait faire un tableau pour que chacun coche “ça je le sais”, “ça je le savais pas” :-p

]]>
By: Xavier Combelle http://sametmax.com/ce-que-vous-ne-saviez-pas-sur-les-collections-en-python/#comment-727 Fri, 20 Jul 2012 20:44:18 +0000 http://sametmax.com/?p=1101#comment-727 je ne savais pas que pop acceptait un argument, mais le reste je le savais merci

]]>