15 conseils Python avancés que les programmeurs expérimentés connaissent

Il n'y a pas de fantôme. 2021-10-25 21:28:56
conseils python avanc que les

Cet article présente15Un simplePythonTechnique,Vers la simplicité et l'efficacité,L'apprentissage est facile à comprendre.
Insérer la description de l'image ici

1.Trier les objets par plusieurs valeurs clés

Supposons que vous triez la liste des dictionnaires suivants:

people = [
{
 'name': 'John', "age": 64 },
{
 'name': 'Janet', "age": 34 },
{
 'name': 'Ed', "age": 24 },
{
 'name': 'Sara', "age": 64 },
{
 'name': 'John', "age": 32 },
{
 'name': 'Jane', "age": 34 },
{
 'name': 'John', "age": 99 },
]

Pas seulement par nom ou par âge , Triez également les deux champs en même temps .InSQLMoyenne, Ce serait une telle requête :

SELECT * FROM people ORDER by name, age

En fait,, La solution à ce problème peut être très simple ,PythonGarantiesort La fonction fournit un ordre de tri stable , Cela signifie également que des éléments plus similaires conserveront leur ordre d'origine . Pour réaliser le tri par nom et âge ,C'est possible.:

import operator
people.sort(key=operator.itemgetter('age'))
people.sort(key=operator.itemgetter('name'))

Notez Comment inverser l'ordre . Première classification par âge , Et Trier par nom ,Utiliseroperator.itemgetter() Obtenez les champs âge et nom de chaque dictionnaire de la liste , Pour obtenir les résultats souhaités :

[
{
'name': 'Ed', 'age': 24},
{
'name': 'Jane', 'age': 34},
{
'name': 'Janet','age': 34},
{
'name': 'John', 'age': 32},
{
'name': 'John', 'age': 64},
{
'name': 'John', 'age': 99},
{
'name': 'Sara', 'age': 64}
]

Le nom est l'élément de tri principal , Si le nom est le même , Par âge .Donc,,Tous lesJohn Tous regroupés par âge .

2.Catégories de données

Depuis3.7Après l'édition,Python Commencer à fournir des catégories de données . Par rapport aux classes régulières ou à d'autres alternatives ( Si plusieurs valeurs ou dictionnaires sont retournés ), Il a plus d'avantages :

  1. Les classes de données nécessitent très peu de code
  2. Les classes de données peuvent être comparées ,Parce que eq Cette fonction peut être réalisée
  3. La classe de données nécessite un indice de type , Réduit la probabilité d'erreurs
  4. Les classes de données peuvent être facilement imprimées pour le débogage ,Parce que__repr__ Cette fonction peut être réalisée

Voici un exemple d'une classe de données au travail :

from dataclasses import dataclass
@dataclass
classCard:
rank: str
suit: str
card=Card("Q", "hearts")
print(card == card)
# True 
print(card.rank)
# 'Q' 
print(card)
Card(rank='Q', suit='hearts')

3.Déduction de la Liste

La dérivation de la liste peut remplacer la boucle ennuyeuse dans le remplissage de la liste ,Sa syntaxe de base est

[ expression for item in list if conditional ]

Voici un exemple très basique , Remplir la liste de séquences numériques :

mylist = [i for i inrange(10)]
print(mylist)
# [0, 1, 2, 3,4, 5, 6, 7, 8, 9]

Parce que l'expression peut être utilisée , Donc vous pouvez aussi faire quelques calculs mathématiques :

squares = [x**2for x inrange(10)]
print(squares)
# [0, 1, 4, 9,16, 25, 36, 49, 64, 81]

Peut même appeler une fonction externe :

defsome_function(a):
return (a +5) /2
my_formula= [some_function(i) for i inrange(10)]
print(my_formula)
# [2.5, 3.0,3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0]

Enfin,Peut être utiliséif Fonction pour filtrer la liste .Dans ce cas,, Seules les réserves peuvent être 2 La valeur de la Division :

filtered = [i for i inrange(20) if i%2==0]
print(filtered)
# [0, 2, 4, 6,8, 10, 12, 14, 16, 18]

4.Vérifier l'utilisation de la mémoire de l'objet

Utilisersys.getsizeof() Vous pouvez vérifier l'utilisation de la mémoire de l'objet :

import sys
mylist =range(0, 10000)
print(sys.getsizeof(mylist))
# 48

Pourquoi cette énorme liste n'a - t - elle que 48Et un octet?,C'est parce querange La classe retournée par la fonction se comporte comme une liste . Par rapport à l'utilisation d'une liste numérique réelle , L'efficacité de stockage des séquences de nombres est beaucoup plus élevée . Nous pouvons créer une liste de nombres réels dans la même plage par dérivation de liste :

import sys
myreallist = [x for x inrange(0, 10000)]
print(sys.getsizeof(myreallist))
# 87632

En utilisantsys.getsizeof(), Nous pouvons en savoir plus sur Python Et l'utilisation de la mémoire .

5.Rechercher les valeurs les plus fréquentes

Pour trouver la valeur la plus fréquente dans une liste ou une chaîne :

test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]
print(max(set(test), key = test.count))
# 4
  • max() Renvoie la valeur maximale dans la liste .key Les paramètres sont triés dans un ordre personnalisé avec une fonction de paramètre unique ,Dans ce cas,test.count, Cette fonction s'applique à chaque élément de l'Itérateur .
  • test.count- Oui.list Fonctions intégrées pour .Il prend un paramètre, Et calculer le nombre d'occurrences de ce paramètre .Donc,test.count(1)Retour2,Ettest.count(4)Retour4.
  • set(test)Retourtest Toutes les valeurs uniques dans ,Alors...{1、2、3、4}

Le Code dans cette ligne acceptera test Toutes les valeurs uniques de ,C'est - à - dire:{1、2、3、4}.Et puis...,max Il sera appliqué list.count Fonction et renvoie la valeur maximale .

Il y a un autre moyen plus efficace :

from collections import Counter
Counter(test).most_common(1)
# [4: 4]

6.Paquets de propriétés

Vous pouvez utiliserattrs Remplacer la classe de données ,SélectionnerattrsIl y a deux raisons:

  1. UtilisationPythonVersion supérieure à3.7
  2. Pour plus de fonctionnalités

Theattrs Les progiciels prennent en charge tous les grands PythonVersion,Y compris:CPython 2.7EtPyPy.Quelquesattrs Il est possible de fournir des validateurs et des convertisseurs de ce type de classes de données extra - conventionnelles . Regardez quelques exemples de codes :

@attrs
classPerson(object):
name =attrib(default='John')
surname =attrib(default='Doe')
age =attrib(init=False)
p =Person()
print(p)
p=Person('Bill', 'Gates')
p.age=60
print(p)
# Output: 
# Person(name='John', surname='Doe',age=NOTHING) 
# Person(name='Bill', surname='Gates', age=60)

En fait,,attrs L'auteur de PEPC'est. Les classes de données sont délibérément maintenues plus simples 、Plus facile à comprendre,Etattrs Toutes les caractéristiques nécessaires sont fournies .

7.Fusionner le Dictionnaire(Python3.5+)

dict1 = {
 'a': 1, 'b': 2 }
dict2= {
 'b': 3, 'c': 4 }
merged= {
 **dict1, **dict2 }
print (merged)
# {'a': 1, 'b':3, 'c': 4}

S'il y a des touches qui se chevauchent , Les clés du premier dictionnaire seront écrasées .InPython 3.9Moyenne, Le dictionnaire de fusion devient plus concis .Là - hautPython 3.9 La fusion dans peut être réécrite comme :

merged = dict1 | dict2

8.Renvoie plusieurs valeurs

Python La fonction dans n'a pas de Dictionnaire , Plusieurs variables peuvent être retournées dans le cas des listes et des classes , Il fonctionne comme suit :

defget_user(id):
# fetch user from database 
# .... 
return name, birthdate
name, birthdate =get_user(4)

C'est une valeur de retour limitée , Mais tout ce qui dépasse 3 Le contenu des valeurs doit être placé dans un (Données)Catégorie.

9.Filtrage des éléments de la liste

filter()Utilisation de

filter()Acceptation de la fonction2Paramètres:

  1. Objet de fonction
  2. Objets itérables

Ensuite, nous définissons 1 Les fonctions et ensuite 1 Liste à filtrer .

D'abord, nous créons1Liste (s), Et retirer jusqu'à 3Éléments de:

original_list = [ 1,2,3,4,5]#Liste des définitions
# Définir la fonction de filtre 
4 def filter_three(number):5
return number > 3
filtered = filter(filter_three, original_list)
filtered_list = list(filtered)
filtered_list
#[4,5]

Nous avons défini la liste original_list Ensuite, nous définissons un paramètre numérique accepté numberFonction defilter_three, Lorsque la valeur du paramètre entrant est supérieure à 3Retour àTrue,Sinon, il retourneFalseNous avons définifilterObjetfiltered,Parmi euxfilter() Le premier argument accepté est l'objet de fonction , Le deuxième argument est que l'objet de liste finira par filter Objet converti en liste , Et finalement obtenir le Sutra filter_threeAprès filtrationoriginal_list Les éléments laissés à l'intérieur .

Similaire, Nous pouvons également utiliser la dérivation de liste pour filtrer les éléments de liste , Comme un moyen élégant de générer et de modifier des listes , Voici le processus d'utilisation de l'inférence de liste pour accomplir la même tâche :

original_list = [1,2,3,4,5]2
filtered_list = [ number for number in original_list if number > 3]# Introduire un jugement conditionnel dans le processus de dérivation de la liste 
print(filtered_list)
#[4,5]

10.Modifier la liste

map()Utilisation de

PythonIntégré dansmap() Les fonctions nous permettent d'appliquer une fonction à chaque élément d'un objet itérable .

Disons que nous voulons obtenir le carré de chaque élément d'un objet de liste , Peut être utilisé pour map()Fonctions, Comme dans l'exemple suivant :

original_list = [1,2,3,4,5]
def square( number):
return number **2
squares =map(square, original_list)
squares_list = list( squares)
print(squares_list)
#[1,4,9,16,25]

Similairefilter()Le processus de travail, Voyons ce qui s'est passé :

Nous avons d'abord défini la liste original_list, Et une fonction qui accepte un paramètre numérique et renvoie sa valeur carrée square() Puis nous avons défini mapObjetsquares,Similairefilter(),map() Le premier argument accepté est l'objet de fonction , Le deuxième argument est que l'objet de liste finira par mapObjetsquaresListe, Pour obtenir le résultat souhaité .

De même, nous pouvons utiliser la dérivation de liste pour accomplir la même tâche :

original_list = [1,2,3,4,5]
squares_list = [number ** 2for number in original_list]
print(squares_list)
#[1,4,9, 16,25]

11.Utilisationzip()Pour combiner les listes

Dans certains cas, nous devons combiner deux ou plusieurs listes , Ce type d'exigence utilise zip() C'est très pratique de terminer .
zip() La fonction reçoit plus d'une liste passée comme paramètre , On obtient ensuite une combinaison d'éléments correspondant à chaque position , Comme dans l'exemple suivant :

numbers = [ 1,2,3]
letters = [ 'a', 'b', 'c']
combined = zip(numbers,letters)
combined_list = list( combined)
print(combined_list)
for item in zip( numbers,letters ):
print(item[0], '\t', item[1])
#[(1,'a'),(2,'b'),(3, 'c')]
#1 a
#2 b
#3 c

12.Inverser la liste

Python La liste dans est une structure de données ordonnée ,C'est pour ça que, L'ordre des éléments de la liste est important , Parfois, nous devons inverser l'ordre de tous les éléments de la liste ,Peut passerPythonOpération de tranchage en,Avec::-1 Pour réaliser rapidement :

original_list = [1,2,3,4,5]
reversed_list = original_list[ : : -1]
print('Avant le retournement: ', original_list)
print('Après le retournement:', reversed_list)
#Avant le retournement:[ 1,2,3,4,5]
#Après le retournement:[5,4,3,2,1]

13.Vérifier la présence d'éléments dans la liste

Dans certains cas, nous voulons vérifier la présence d'un élément dans la liste , C'est le moment d'utiliser PythonDansinOpérateur, Par exemple, nous avons une liste des noms de toutes les équipes gagnantes , Quand on veut savoir si un nom d'équipe a gagné , Comme dans l'exemple suivant :

games = [ 'Yankees ', 'Yankees ', 'Cubs ', 'Blue Jays ', 'Giants ']
def isin(item,list_name) :
if item in list_name: print(f"{
item} is in the list! ")
else: print(f"{
item} is not in the list! ")
isin( 'Blue Jays ' , games)
isin( ' Angels', games)
#Blue Jays is in the list!
#Angels is not in the list!

14.Aplatir la liste imbriquée

Dans certains cas, nous rencontrons des listes imbriquées , Chaque élément est une liste différente , Dans ce cas, nous pouvons utiliser la dérivation de liste pour aplatir cette liste imbriquée ,Comme ci - dessous2 Exemples de couches imbriquées :

nested_list = [[1,2,3],[4,5,6],[7,8,9]]
flat_list = [i for j in nested_list for i in j]
print(flat_list)
#[1,2,3,4,5,6,7,8,9]

Supplément:

Voici une liste imbriquée à deux niveaux , Si plus de couches sont imbriquées , Combien de couches faut - il pour écrire forCycle,C'est plus compliqué., Il y a une meilleure façon de ,On peut utiliserpip install dm-treePour installertree Cette bibliothèque dédiée à l'aplatissement des structures imbriquées , Vous pouvez aplatir n'importe quelle liste imbriquée de couches ,Les exemples d'utilisation sont les suivants::

import tree
nested_list_2d = [[1,2,3],[4,5,6],[7,8,9]]
nested_list_3d = [[[1,2],[3,4]],
[[5,6],[7,8]],
[[9,10],[11,12]]]
print(tree.flatten(nested_list_2d))
print(tree.flatten(nested_list_3d))
#[1,2,3,4,5,6,7,8,9]
#[1,2,3,4,5,6,7,,8, 9, 10, 11,12]

15.Vérifier l'unicité

Si vous voulez voir si toutes les valeurs de la liste sont uniques ,Peut être utiliséPythonDansset Caractéristiques de la structure des données ,Par exemple, l'exemple suivant:

list1 = [ 1,2,3,4,5]
list2 = [1,1,2,3,4]
def isunique( 1):
if len(l) == len(set(l)) :
print( Unique! ')
eise: print((' Non. —! ')
isunique( list1)
isunique(list2)
#Seulement—!
# Non. —!

Votre troisième compagnie.(- Oui.,Collection,Commentaires)C'est le moteur de ma production continue.,Merci beaucoup..
Partage des ressources,Apprentissage et communication,Je peux ajouter Wechat:bobin1124

版权声明
本文为[Il n'y a pas de fantôme.]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211025212814045u.html

  1. python中关于数列删减问题
  2. Python frequently asked questions - PIP install specifies the requirements.txt exported by the poetry, and an error is reported: in -- require hashes mode, all req
  3. Sur le problème de la réduction des séries en python
  4. 关于Python安装的问题(不知道自己下的什么)
  5. What do Python's u, R, B, f mean?
  6. Actual combat! Why is Changjin lake so popular? I use Python to analyze cat eye reviews.
  7. Python用xpath定位正确返回的是返回空值
  8. Python error handling
  9. django_celery_beat的clocked定时任务不触发
  10. Python renvoie une valeur nulle si elle est correctement retournée en utilisant XPath
  11. 关于#python#的问题:sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
  12. python + selenium 能定位出来算你厉害
  13. Python + sélénium peut vous localiser.
  14. Python code reading (Chapter 13): check whether the elements in the list are the same
  15. Python online retail data association rule mining Apriori algorithm data visualization
  16. python习题,要求用for循环和if语句。
  17. 用Python获得女友聊天记录,一招解决疑神疑鬼
  18. Obtenez le chat de votre petite amie en python pour résoudre les problèmes
  19. Les exercices Python nécessitent des boucles pour et des énoncés if.
  20. Python code reading (Chapter 13): check whether the elements in the list are the same
  21. 练手练到阅文集团作家中心了,python crawlspider 二维抓取学习
  22. python阶乘和数题,要求用for循环,if语句
  23. Python 求最大幂次,用while循环
  24. L'entraîneur s'est entraîné au centre d'écriture du Groupe Yuewen, Python crawlspider 2D grapping Learning
  25. 这六个Python程序的代码要怎么写
  26. Python calcule la puissance maximale et utilise la Boucle while
  27. python入门:请问怎么避免用户输入相同内容呢
  28. python用迭代法求平方根要求用while循环
  29. Comment écrire le Code de ces six programmes Python
  30. python用迭代法求平方根要求用while循環
  31. Python a besoin d'une Boucle while pour trouver la racine carrée par itération
  32. Démarrer avec Python: Comment puis - je empêcher les utilisateurs d'entrer le même contenu?
  33. 这么多的内置函数能记住吗?对python的68个内置函数分类总结!
  34. 這麼多的內置函數能記住嗎?對python的68個內置函數分類總結!
  35. Est - ce que tant de fonctions intégrées peuvent être mémorisées? Résumé de la classification des 68 fonctions intégrées de Python!
  36. 这么多的内置函数能记住吗?对python的68个内置函数分类总结!
  37. Est - ce que tant de fonctions intégrées peuvent être mémorisées? Résumé de la classification des 68 fonctions intégrées de Python!
  38. python 假设lst=[3,4,12,[6,9,12,24],[12,18,34]]统计list中包含元素12的个数
  39. python 假設lst=[3,4,12,[6,9,12,24],[12,18,34]]統計list中包含元素12的個數
  40. Python suppose que LST = [3,4,12, [6,9,12,24], [12,18,34]] compte le nombre d'éléments 12 dans la Liste
  41. 你需要知道的 20 个 Python 技巧
  42. 如何在 Python 中搜索和替换文件中的文本?
  43. 只需 15 行代码即可进行人脸检测!(使用Python 和 OpenCV)
  44. Python中选择结构问题求解
  45. La détection faciale ne nécessite que 15 lignes de code! (en utilisant Python et OpenCV)
  46. Comment rechercher et remplacer du texte dans un fichier en python?
  47. 20 conseils Python que vous devez connaître
  48. python计算机视觉项目供Java后端调用
  49. python計算機視覺項目供Java後端調用
  50. Python Computer Vision Project for Java Backend Calls
  51. Résoudre le problème de la structure de sélection en python
  52. 使用Python,OpenCV的Meanshift 和 Camshift 算法來查找和跟踪視頻中的對象
  53. Trouver et suivre des objets dans la vidéo en utilisant Python, les algorithmes meanshift et camshift d'OpenCV
  54. Visualisation python - solutions de dessin 3D pyecharts, matplotlib, openpyxl
  55. Automatically generate API documents from Python source code comments
  56. 下载pandas出错了,怎么解决啊
  57. Une erreur s'est produite lors du téléchargement de pandas.
  58. Python Type Hints 从入门到实践
  59. Python Type Hints 從入門到實踐
  60. Type Python hints from starting to Practice