Maîtrisez la notation d'inclusion

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

Notation qui peut être utilisée lors de la création de listes et de dictionnaires avec python. Étant donné que python a une boucle for lente, vous pouvez utiliser la notation d'inclusion lors de la création de listes et de dictionnaires pour la rendre beaucoup plus rapide.

De base

Lorsque vous faites une liste, cela ressemble à ceci.

new_list = [f(myiter) for myiter in origin_list]

Vous pouvez également créer un dictionnaire en remplaçant [] par {}.

new_dict = {indexes[myiter]:f(myiter) \
for myiter in origin_list}

Le modèle de base est le suivant.

[(Expression utilisant un itérateur) pour(iterater)in (objet itérable d'origine)]

Utiliser le branchement conditionnel avec if

si seulement

Si vous n'en utilisez qu'un si, ajoutez ** à la fin **.

Extraire les nombres impairs jusqu'à 10


odd = [i for i in range(10) if i%2 != 0]
# [1,3,5,7,9]

À ce moment, si fonctionne comme un filtre.

Lors de l'utilisation de if else

Si vous utilisez également else, ajoutez ** avant ** pour.

C'est bizarre"odd", Même"even"rends le


xx = ["even" if i%2==0 else "odd" for i in range(10)]
# ['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']

La raison pour laquelle le if doit être préfixé est que le if à ce moment fait partie de l'opérateur ternaire, contrairement au if précédent. "even" if i% 2 == 0 else "odd" ```est une expression, et elle sera répétée avec for.

~~ Vous ne pouvez pas utiliser plusieurs autres. ~~ Elif ne peut pas être utilisé lors de la création de plusieurs branches conditionnelles. Ceci peut être réalisé en utilisant plusieurs if else.

Lorsqu'il y a plusieurs indices

Motif à aligner

xx = [i+j for i in i_list for j in j_list]

Motif imbriqué

xx = [[i+j for i in range(3)] for j in range(5)]

Si vous souhaitez utiliser des opérations numpy, transmettez-le à np.array.

xx = np.array([[i+j for i in range(3)] for j in range(5)])

numpy.array est assez intelligent, il peut donc mouler correctement les doubles, triples et quadruples.

Motif utilisant zip

Disposer avec (0,0), (1,1), (2,2), ...

xx = [i+j for i,j in zip(mylist_i,mylist_j)]

Pour éviter de plonger dans le marais

Vous êtes peut-être venu jusqu'ici et vous êtes déjà "Euh". Puisqu'il n'y a pas de règle pour les sauts de ligne dans la notation d'inclusion de liste, une ligne devient longue et obscurcie. Donc, s'il s'allonge, assurez-vous d'insérer un saut de ligne approprié **.

Dans le cas de VSCode, si vous mettez \ dans la première ligne, il sera bien formaté par la suite. En fait, il fonctionne avec ou sans .

#Saut de ligne absolu lors de l'utilisation de if
xx = ["even" if i % 2 == 0 else "odd" \
    for i in range(10)]

#Si l'expression est longue, insérez une pause dans la partie longue
zz = [np.sin(xx) + np.random.rand(xx.shape) \
    for xx in list_xx]

Recommended Posts

Maîtrisez la notation d'inclusion
Ceci et celui de la notation d'inclusion.
Cours de base Python (10 notation d'inclusion)
Maîtrisez les riches fonctionnalités d'IPython
Maîtriser le type avec Python [compatible Python 3.9]
Maîtriser le module lowref en Python
[Blender x Python] Maîtrisons le matériel !!
Mémorandum des débutants en python