Notez que la notation d'inclusion de liste de Python est toujours déroutante

introduction

J'utilise Python au travail "Ah, le processus de création d'une liste ici, si vous utilisez la notation d'inclusion de liste, vous pouvez l'écrire de manière concise." Je pense peut-être. Cependant, il y a étonnamment peu de situations où je veux écrire une notation d'inclusion de liste, donc quand j'ai décidé de l'écrire, "Oh, comment écrivez-vous la notation d'inclusion de liste? Eh bien, je n'ai pas le temps et est-ce que je boucle comme d'habitude?" C'est dommage, donc y compris le sens du mémorandum pour moi-même.

Qu'est-ce que la notation d'inclusion de liste?

Lorsque vous avez entendu ce mot pour la première fois, qu'aviez-vous en tête? Plein de marques. .. .. Pour le dire très simplement, la notation d'inclusion de liste est ** Comment créer des données de liste en une seule ligne ** est.

Cependant, tout ne peut pas être écrit sur une seule ligne, et le processus de création d'une liste dans une boucle peut être écrit sur une seule ligne (bien qu'il y ait un malentendu). J'ai moi-même pensé: «Le code que j'écris au travail est compliqué!», Mais il peut être utilisé de manière inattendue.

Comment écrire

Boucle normale (ce n'est pas une notation d'inclusion de liste)

data = []
for i in range(10):
    data.append(i)

print(data)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Notation d'inclusion de liste

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

Commentaire

Le résultat de la notation d'inclusion de liste est le même que celui d'une boucle normale. Cependant, la notation d'inclusion de liste nécessite moins de description. Et le code est concis et facile à lire. (C'est difficile à lire à moins que vous ne vous y habituiez.)

Jetons un œil au code inclus dans la liste.

[...] Comme vous le savez, cela crée une liste, éliminant le besoin de data = [] dans les boucles régulières.

for i in range(10) C'est la même chose pour les boucles régulières et les inclusions de liste. Cependant, : n'est pas requis pour la notation d'inclusion de liste.

i for i in range(10) Le premier «i» qui apparaît contient la valeur de «i» (le deuxième «i») qui a été récupérée dans la boucle. La valeur de «i» qui apparaît en premier est réécrite pour chaque boucle. Le «i» est ajouté à la liste pour le nombre de boucles.

Un peu plus de béton

Je pense qu'il est plus facile de comprendre si c'est un peu plus précis, alors je vais l'expliquer dans le cas suivant.

cas 1

Si vous souhaitez traiter les données de la liste. Par exemple, si vous voulez ajouter @ à chaque donnée de la liste ['aa', 'b', 'ccc'].

items = ['aa', 'b', 'ccc']
print([item + '@' for item in items])
# ['aa@', 'b@', 'ccc@']

Je crée une autre liste en ajoutant «@» aux données des «articles». À partir des données de liste, une autre ** donnée de liste a été créée sur une ligne **.

Cas 2

Lorsque vous souhaitez ajouter un autre caractère au milieu d'une chaîne de caractères selon une règle fixe telle que le traitement des données. Par exemple, si vous voulez ajouter - aux données ʻabcdefgh` pour chaque caractère.

items = 'abcdefgh'
print('-'.join([item for item in items]))
# a-b-c-d-e-f-g-h

Ici, ** les données de liste sont créées à partir d'une chaîne de caractères sur une ligne. ** ** Les données de cette liste sont «jointes avec» pour les renvoyer à une chaîne.

[Une addition] J'ai reçu un commentaire, je vais donc l'ajouter. Cela était possible sans utiliser la notation d'inclusion de liste. Vous n'avez pas à le gaspiller.

items = 'abcdefgh'
print('-'.join(items))
# a-b-c-d-e-f-g-h

Au fait, si vous voulez ajouter - tous les deux caractères.

items = 'abcdefgh'
print('-'.join([items[i*2: i*2+2] for i in range(int(len(items)/2))]))
# ab-cd-ef-gh

C'est un peu surchargé, alors est-ce que c'est comme ça?

items = 'abcdefgh'
loop_count = int(len(items)/2)
print('-'.join([items[i*2: i*2+2] for i in range(loop_count)]))
# ab-cd-ef-gh

[Une addition] J'ai également reçu un commentaire, je vais donc l'ajouter. Dans le cas ci-dessus, le compteur «i» est utilisé, de sorte qu'un accès hors de portée peut se produire. C'est un style d'écriture qui l'évite.

items = 'abcdefgh'
print('-'.join(ch1+ch2 for ch1, ch2 in zip(items[::2], items[1::2])))
# ab-cd-ef-gh

J'ai trouvé que le dernier caractère n'est pas sorti lorsque le nombre de caractères est impair, même si le compteur est utilisé ou non. J'utiliserais un compteur, mais j'ai pu l'éviter.

import math
items = 'abcdefghi'
loop_count = math.ceil(len(items) / 2)
print('-'.join([items[i*2: i*2+2] for i in range(loop_count)]))
# ab-cd-ef-gh-i

finalement

Dans le cas 1, les données de la liste sont traitées pour créer une autre liste. Le cas 2 est un exemple de traitement d'une chaîne de caractères pour créer une liste.

Les deux cas peuvent être réalisés à l'aide de boucles, Les inclusions de liste rendent votre code simple et concis.

Recommended Posts

Notez que la notation d'inclusion de liste de Python est toujours déroutante
Notation d'inclusion de liste Python facile à oublier
Notation et générateur d'inclusion de liste Python
Notez qu'il prend en charge Python 3
python Remarque: déterminez si l'argument de ligne de commande est dans la liste
Remarque: Python
10 erreurs Python communes aux débutants
Note de Python
[Python] liste
[Note] Termes difficiles à retenir
[Python] Solution au problème que les éléments sont liés lors de la copie d'une liste
À propos du fait que la notation d'inclusion de liste n'est plus lente dans PyPy 7.3.1
Liste des liens que les débutants en apprentissage automatique apprennent
Remarque: décorateur Python
bases de python: liste
Note de programmation Python
[Python] Note d'apprentissage 1
Note d'apprentissage Python_004
Note d'apprentissage Python_003
Python> Compréhension / Notation inclusive> Compréhension de liste
[Remarque] openCV + python
Remarque: Notation d'inclusion de liste
Note du débutant Python
Manipulation de liste Python
Note d'apprentissage Python de Mayungo: liste d'histoires et de liens
Implémentation de List et Bool en Python et SQLite3 (note personnelle)
Notez qu'écrire comme ça avec ruby c'est écrire comme ça avec python
Choses à noter lors de l'initialisation d'une liste en Python
Notation d'inclusion Python3 (liste, dictionnaire) que j'ai vue quelque part