Maison  >  Article  >  développement back-end  >  Comment appliquer la compréhension de liste Python

Comment appliquer la compréhension de liste Python

WBOY
WBOYavant
2023-05-20 08:10:132010parcourir

Compréhension de liste Python

La compréhension de liste est un raccourci pour construire une liste en Python. Vous pouvez créer une liste en utilisant un code simple.

1 Fonction Range()

La fonction range() de Python Peut être utilisée pour créer une liste de. entiers, généralement utilisés dans les boucles for.

syntaxe range() : range(start, stop[, step])

start : le comptage commence à partir du début, la valeur par défaut est de commencer à partir de 0 (intervalle fermé), par exemple. : range(5) est équivalent à range(0,5).

stop : Compter jusqu'à la fin de l'arrêt, mais sans inclure l'arrêt (intervalle ouvert). Par exemple : range(0,5) est [0, 1,]. 2, 3, 4], à l'exclusion de 5.

step : step, la différence entre deux valeurs adjacentes, la valeur par défaut est 1. Par exemple : range(0,5) est équivalent à range(0,

).

Pourquoi devrions-nous parler de range() avant la compréhension de liste ? Parce que la compréhension de liste génère une liste via un objet itérable. Range() peut être considéré comme l'objet itérable le plus couramment utilisé dans la compréhension de liste. range() est l'une des essences. Sans range(), la lisibilité et la simplicité des compréhensions de liste seront considérablement réduites

2. Compréhensions de liste

Compréhension de liste (compréhension de liste) Cela fait référence à la boucle pour créer une liste.

La boucle for a un très large éventail de scénarios d'application et peut également être utilisée pour créer une liste, et la compréhension de la liste est équivalente à une version simplifiée de la boucle for créant une liste.

# for循环
list_a = list()
for a in range(5):
    list_a.append(a)
print(list_a)
# 列表推导式
list_b = [b for b in range(5)]
print(list_b)

Ceux ci-dessus utilisent respectivement le for boucle et Le code pour créer une liste en utilisant la compréhension de liste, les résultats de list_a et list_b sont les mêmes, les deux sont [0, 1, 2, 3, 4].

Regardons la compréhension de liste plus compliquée :

# in后面跟其他可迭代对象,如字符串
list_c = [7 * c for c in "python"]
print(list_c)
 
# 带if条件语句的列表推导式
list_d = [d for d in range(6) if d % 2 != 0]
print(list_d)
 
# 多个for循环
list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
print(list_e)
 
# 嵌套列表推导式,多个并列条件
list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
print(list_g)

Résultat de l'exécution :

['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn']
[1, 3, 5]
[(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]

Explication du code :

1. La compréhension de la liste traversera les objets itérables suivants, puis fonctionnera selon l'expression avant for pour générer la liste finale.

2. le parcours for sera suivi immédiatement. Ensuite, effectuez un jugement conditionnel

3 S'il y a plusieurs boucles for, le nombre final de données est le produit cartésien de plusieurs boucles for

4. principe des boucles for imbriquées Idem.

3. Lisibilité du code

Pour ceux qui ne sont pas familiers avec la compréhension de liste, vous pouvez utiliser une boucle for pour réaliser la même fonction, mais cela nécessite plusieurs lignes de code, alors que la compréhension de liste ne nécessite que une ligne de code.

Beaucoup de gens diront que le code est concis mais que la lisibilité est réduite. En fait, ce n'est pas le cas lorsque l'on est familier avec les compréhensions de listes (nous le connaîtrons après l'avoir écrit quelques-uns). fois), la fonction du code peut être facilement vue en un coup d'œil, mais le code de la boucle for est fondamentalement impossible de tout lire en un coup d'œil, surtout lorsque la boucle for qui crée la liste est imbriquée dans d'autres boucles for de. logique métier, c'est précisément l'utilisation de compréhensions de liste qui est la plus lisible

En même temps, les compréhensions de liste ont leur propre portée locale dans Python3, tout comme une fonction. Les variables et les affectations à l'intérieur de l'expression ne fonctionnent que localement. Les variables portant le même nom dans le contexte de l'expression peuvent également être référencées normalement, et les variables locales ne les affecteront pas.

Autrement dit, la dérivation de liste n'a pas de problème de fuite de variable et l'opération d'affectation dans. Il est peu probable que la dérivation de liste affecte la variable du même nom dans le contexte de dérivation de liste.

Bien sûr, il n'est pas recommandé à tous les scénarios d'utiliser la dérivation de liste. Par exemple : si le code de compréhension de liste dépasse deux lignes, vous devriez envisager de le modifier. à une boucle for. Les compréhensions de liste qui dépassent deux lignes sont vraiment illisibles. Le principe général est de n'utiliser que les compréhensions de liste pour créer une nouvelle liste et d'essayer de la garder aussi courte que possible.

4. , le concept de dérivation de liste a été transplanté dans le dictionnaire, entraînant la dérivation de dictionnaire (nous verrons la dérivation d'ensemble plus tard).

Si la liste Le concept de dérivation vous est déjà familier, et il n'est pas difficile d'accepter la dérivation de dictionnaire . Il suffit de regarder le code :

# 因为key是唯一的,所以最后value都是1
dict_a = {key: value for key in 'python' for value in range(2)}
print(dict_a)
 
# 可以根据键来构造值
dict_b = {key: key * key for key in range(6)}
print(dict_b)
 
# 遍历一个有键值关系的可迭代对象
list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
print(dict_c)

Résultats d'exécution :

{'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{'HUAWEI': '华为', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}

5. Dérivation d'ensemble

Python 2.7 apporte non seulement la dérivation par dictionnaire, mais aussi Voici la dérivation d'ensemble

De même, regardons directement le code, donc. que nous pouvons voir intuitivement la dérivation de l'ensemble.

# 遍历一个可迭代对象生成集合
set_a = {value for value in '有人云淡风轻,有人负重前行'}
print(set_a)

Résultats d'exécution :

{'负', '有', '人', '轻', '前', '云', '重', ',', '淡', '风', '行'}

Les ensembles ne sont pas ordonnés et non répétitifs, donc les éléments en double seront automatiquement supprimés et l'ordre d'affichage est différent pour chaque exécution.

Cela peut être résumé à partir du code ci-dessus :

La dérivation d'ensemble consiste à remplacer le [] de la dérivation de liste par {}, et la dérivation de dictionnaire consiste à déduire deux valeurs et à les combiner. Elle est construite comme une paire clé-valeur.

De plus, qu'il s'agisse d'une compréhension de dictionnaire ou d'une compréhension d'ensemble, elle peut être suivie d'instructions conditionnelles if, de boucles imbriquées, etc. comme une compréhension de liste. Elle peut être utilisée selon vos propres besoins.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer