PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

30 Python Language Features and Tricks You May Not Know About

mardi 20 mai 2014 à 16:12
Vigor, le 12/03/2014 à 17:48
Astuces python brutes
(Permalink)

Sebsauvage, le 18/05/2014 à 11:53
C'est vrai que Python est beau, pour ça  :-)
(via http://www.viggor.eu/shaarli/?0OPgRQ)
(Permalink)

tcit, le 18/05/2014 à 12:05
Putain, ça me rappelle à quel point Python est beau.
(Permalink)

phyks, le 18/05/2014 à 16:31
(via sebsauvage)
(Permalink)

JeromeJ, le 19/05/2014 à 08:57
Ouuuuuh, y a des trucs vachement chouettes !

Comme "1.14   Grouping adjacent list items using zip", c'est brillant, utilisé plusieurs instances du même objet iter pour regrouper les éléments ensemble. <3 (Même si j'avoue que la deuxième méthode est ptet plus lisible :D )

Ou "1.30   Using default dictionaries to represent simple trees" : Miam !

Etc.

(via http://sebsauvage.net/links/?3ASd0g )
(Permalink)

Famille Michon, le 19/05/2014 à 10:16
Des choses intéressantes :

* Gérer une liste par "fenêtres" délimitées :
>>> a = [1, 2, 3, 4, 5, 6]
>>> zip(a[::2], a[1::2])
[(1, 2), (3, 4), (5, 6)]

>>> zip(a[::3], a[1::3], a[2::3])
[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))
>>> group_adjacent(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>> group_adjacent(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]


* La même chose mais avec une fenêtre glissante (qui se déplace d'un seul élément à chaque fois) :
>>> from itertools import islice
>>> def n_grams(a, n):
...     z = (islice(a, i, None) for i in range(n))
...     return zip(*z)
...
>>> a = [1, 2, 3, 4, 5, 6]
>>> n_grams(a, 3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
>>> n_grams(a, 2)
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
>>> n_grams(a, 4)
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

* Inverser un dictionnaire :
mi = dict(zip(m.values(), m.keys()))

* Aplatir une liste (ce que fait Perl par défaut) :
>>> a = [[1, 2], [3, 4], [5, 6]]
>>> list(itertools.chain.from_iterable(a))
[1, 2, 3, 4, 5, 6]

* Faire correspondre des objets uniques à un compteur :
>>> import itertools, collections
>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)
>>> value_to_numeric_map['a']
0
>>> value_to_numeric_map['b']
1
>>> value_to_numeric_map['c']
2
>>> value_to_numeric_map['a']
0
>>> value_to_numeric_map['b']
1

* Récupérer les x plus gros ou petits éléments d'une liste :
>>> a = [random.randint(0, 100) for __ in xrange(100)]
>>> heapq.nsmallest(5, a)
[3, 3, 5, 6, 8]
>>> heapq.nlargest(5, a)
[100, 100, 99, 98, 98]

* Faire un group by (!)
>>> data.sort(key=itemgetter(-1))
>>> for value, group in itertools.groupby(data, lambda r: r[-1]):
...     print '-----------'
...     print 'Group: ' + value
...     print_data(group)
(Permalink)

nabella, le 20/05/2014 à 16:12
Un article recensant un très grand nombres de "trucs" Python.

Il y a des choses tout à fait bateau pour un dev' Python, mais il y a aussi, grâce à des contributions de la "communauté", tout un tas de "tricks" d'un niveau un peu supérieurs, ce qui fait de cet article une très bonne base de connaissance de résolution de problèmes unitaires classiques :)

L'auteur a également mit son article sur github pour en faciliter la gestion (et pour ma part, le suivi !) : https://github.com/sahands/python-by-example
(Permalink)