Maison >développement back-end >Tutoriel Python >30 fonctionnalités et compétences incontournables du langage Python (3)

30 fonctionnalités et compétences incontournables du langage Python (3)

高洛峰
高洛峰original
2017-03-17 16:44:011249parcourir

Depuis que j'ai commencé à apprendre Python, j'ai décidé de maintenir une liste de "trucs" que j'utilise fréquemment. Chaque fois que je vois un morceau de code qui me fait penser "Cool, ça marche !" (dans un exemple, sur StackOverflow, dans un logiciel open source, etc.), je l'essaye jusqu'à ce que je le comprenne, puis je l'ajoute à la liste. . Ce message fait partie d'une liste nettoyée. Si vous êtes un programmeur Python expérimenté, même si vous en connaissez peut-être déjà certains, vous en découvrirez peut-être encore certains que vous ne connaissez pas. Si vous êtes un programmeur C, C ou Java qui apprend Python, ou si vous commencez tout juste à apprendre la programmation, vous trouverez beaucoup d'entre eux très utiles, comme moi.

Chaque astuce ou fonctionnalité de langage ne peut être vérifiée qu'à travers des exemples sans explication excessive. Même si j'ai essayé de rendre les exemples clairs, certains d'entre eux sembleront encore un peu compliqués, selon votre familiarité. Ainsi, si vous n'êtes pas sûr après avoir regardé l'exemple, le titre peut fournir suffisamment d'informations pour que vous puissiez obtenir le contenu détaillé via Google.

La liste est triée par difficulté, avec les fonctionnalités et techniques linguistiques couramment utilisées au début.

1.30 Éléments maximum et minimum (heapq.nlargest et heapq.nsmallest)

>>> ) pour dans xplage(100)]

>>> heapq.nsmallest(5, a)

[3, 3 , 5, 6, 8]

>>> heapq.nlargest(5, a)

[100, 100, 99, 98, 98]

1.31 Produit cartésien (itertools.product)

>>> pour p dans itertools.product([1, 2, 3], [4, 5]) :

( 1, 4)

(1, 5)

(2, 4)

(2, 5)

(3, 4)

(3, 5)

>>> pour p dans itertools.product([0, 1], répétition=4) :

... imprimer ''.join(str(x) for x in p)

...

0000

0001

0010

0011

0100

0101

0110 🎜 >

1010

1011

1100

1101

1110

1111

1.32 combinaison de combinaisons et de remplacement (itertools.combinations et itertools.combinations_with_replacement)

>>> ; pour c dans itertools.combinations([1, 2, 3, 4, 5], 3):

... print ''.join(str(x) for x in c)

...

123

124

125

134

135

145

234

235

245

345

>>> pour c dans itertools.combinations_with_replacement([1, 2, 3], 2):

... print ''.join(str(x) for x in c)

...

11

12

13

22

23

33

1.33 tri(itertools.permutations)

>>> pour p dans itertools.permutations([1, 2, 3, 4]) :

... print ''.join(str(x) for x in p)

...

1234

1243

1324

1342

1423

1432

2134

2143

2314

2341 🎜>

2413

2431

3124

3142

3214

3241

3412

3421

4123

4132

4213

4231

4312

4321

1.34 Itération de lien (itertools.chain)

>>> a = [1, 2, 3, 4]

>>> pour p dans itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)) :

... imprimer p

...

(1, 2)

(1, 3)

(1, 4)

(2, 3)

(2, 4)

(3, 4)

(1, 2, 3)

(1, 2, 4)

(1, 3, 4)

(2, 3, 4)

>>> sous-ensemble dans itertools.chain.from_iterable(itertools.combinations(a, n) for n in range(len(a) 1 ))

... imprimer le sous-ensemble

...

()

(1,)

(2,)

(3,)

(4,)

(1, 2)

(1, 3)

(1, 4)

(2, 3)

(2, 4 )

(3, 4)

(1, 2, 3)

(1, 2, 4)

(1, 3, 4 )

(2, 3, 4)

(1, 2, 3, 4)

1.35 Regrouper les lignes par valeur donnée (itertools.groupby)

>>> de l'opérateur import itemgetter

>>>

>>> avec open('contactlenses.csv', 'r') comme fichier entrant :  

...     data = [line.strip().split(',') pour la ligne dans le fichier entrant]  

...  

>>> data = data[1:]  

>>> def print_data(rows):  

...     print 'n'.join('t'.join('{: <16}'.format(s) for s in row) pour la ligne dans les lignes )  

...  

 

>>> print_data(data)  

jeune               myope                   non                      réduit                  aucun  

jeune              myope                   non                    normal                  doux  

jeune               myope                  oui     

jeune               hypermétrope            non                     réduit                 aucun  

jeune               hypermétrope         non                     normal                  doux  

jeune               hypermétrope            oui                    réduit              aucun  

jeune               hypermétrope            oui                     normal                  dur  

pré- presbyte      myope                   non                    réduit                 aucun  

pré-presbyte      myope                   non                     normal                  doux  

pré-presbyte      myope                   oui                    réduit              aucun  

pré-presbyte      myope                   oui                     normal                  dur  

pré-presbyte      hypermétrope            non                     réduit                 aucun  

pré-presbyte       hypermétrope            non        

pré-presbyte      hypermétrope            oui                    normal                  aucun  

presbyte          myope                   non                     réduit                 aucun  

presbyte          myope                  non                      normal                  aucun  

presbyte          myope                   oui                                   aucun  

presbyte          myope                   oui                     normal                  dur  

presbyte         hypermétrope            non réduit                 aucun  

presbyte          hypermétrope            non                     normal                 doux  

presbyte         hypermétrope            oui                   réduit                aucun  

presbyte          hypermétrope           oui                  normal                  aucun  

 

>> ;> data.sort(key=itemgetter(-1))  

>>> pour la valeur, regroupez dans itertools.groupby(data, lambda r: r[-1]):  

...     print '-----------' 

...     print 'Groupe : ' valeur  

...     print_data(group)  

...  

-----------  

Groupe : dur  

jeune               myope                   oui                    normal                  dur  

jeune              hypermétrope            oui                    normal                dur  

pré-presbyte      myope                    oui                normal                  dur  

presbyte          myope oui                     normal                  dur  

----------  

Groupe : aucun  

jeune               myope              Non aucun  

jeune               hypermétrope            non                      réduit                 aucun  

jeune               hypermétrope           oui                     réduit                 aucun  

pré-presbyte      myope                   non                     réduit                aucun  

pré-presbyte       myope                  oui                     réduit                aucun  

pré-presbyte      hypermétrope           non                      réduit              aucun  

pré-presbyte      hypermétrope            oui                     réduit                 aucun  

pré-presbyte      hypermétrope            oui                     normal                aucun  

presbyte          myope                  non                      réduit                 aucun  

presbyte          myope                   non                    normal                 aucun  

presbyte          myope                   oui                     réduit                 aucun  

presbyte          hypermétrope            non                     réduit                 aucun  

presbyte          hypermétrope           oui  

-----------  

Groupe : doux  

jeune               myope                  non                      normal                  doux  

jeune              hypermétrope            non                      normal                  doux  

pré-presbyte       myope                  non                   normal                  doux  

pré-presbyte      hypermétrope            non normal                  doux  

presbyte          hypermétrope          non                     normal                  doux 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn