[python] Inversez avec des tranches! !! (Il y a aussi un commentaire sur les tranches!)

Un mémorandum car c'était une nouvelle découverte pour moi concernant le tranchage. Les bases sont bonnes: arrow_double_down: [80% skip](#% E3% 81% 8A% E5% BE% 85% E3% 81% A1% E3% 81% 8B% E3% 81% AD% E3% 82 % B9% E3% 83% A9% E3% 82% A4% E3% 82% B9% E3% 81% A7% E3% 83% AA% E3% 83% 90% E3% 83% BC% E3% 82% B9 ): arrow_double_down:

Les bases du tranchage! !!

Je pense que vous pouvez également découper et extraire des éléments lors de l'extraction d'éléments à partir de listes et de chaînes. tranche? Qu'est-ce que c'est? est-ce délicieux? Expliquons comment l'utiliser pour ceux qui disent.

Postscript (27/05/2019)

En prévision de la fin du support de python2, la notation a été modifiée pour correspondre à python3.

Préparation

Ce n'est pas une tranche: sweat_smile:

#Un objet range est bien, mais j'ose le convertir en objet liste pour l'explication.
a = list(range(0,10)) 
a[2] #2

Trancher normalement

#i-th à j-Extraire le premier élément
#(Cependant, 0<= i <Satisfaire la relation de j
#Aussi je<Quand 0 je= len(a) + i】【j <Quand 0 j= len(a) +j])
a[i:j] #[a[i], a[i+1], a[i+2], ..., a[j-1]]
#2e au 7e(8-1)Extraire le deuxième élément
a[2:8] #[2, 3, 4, 5, 6, 7]
#Si i est omis, à partir du point de départ
a[:6] #[0, 1, 2, 3, 4, 5]
#Si j est omis, jusqu'à la toute fin de l'élément
a[7:] #[7, 8, 9]

Tranche par derrière

Si vous en faites un nombre négatif, il comptera à l'arrière.

# [-1]Sortez le dernier élément avec
#c'est[len(a)-1]Je pense que c'est aussi avec (ne pas lire la source)
a[-1] #9
# -À partir du 8-6(-5-1)Extraire le deuxième élément
a[-8:-5] #[2, 3, 4](nepasutiliser)
#Du point de départ-6(-5-1)Extraire le deuxième élément
a[:-6] #[0, 1, 2, 3](Presquejamaisutilisé)
# -Extraire les éléments du 8 au point final
a[-2:] #[8, 9](Souventutilisépourretirerdesextensions)

Puisque la règle "d'extraction du j-1er élément du i-ème" ne change pas, l'exemple suivant est également possible.

#De la seconde-6(-5-1)Extraire le deuxième élément
a[2:-5] #[2, 3, 4]
# -8e au 5e(6-1)Extraire le deuxième élément
a[-8:6] #[2, 3, 4, 5]

Python Web est l'explication la plus facile à comprendre du concept de tranchage.

Faites un pas et tranchez! !!

Découvrez comment utiliser les tranches un peu plus loin comme prémisse! Est-ce surprenant pour ceux qui ne le savent pas? Je ne savais pas d'ici.

Tranche d'étape (nommée arbitrairement)

Strictement parlant, y compris cette étape, c'est dans les spécifications de tranche en python. Donc, à proprement parler, il est étrange de l'appeler une étape par étape. Cependant, pardonnez-moi si c'est facile à comprendre. .. ..

#i-th à j-Extraire le premier élément tous les k
#(Cependant, la constante c est 0<= c < (j-i)/Entier maximum qui satisfait k)
a[i:j:k] #[a[i+0*k], a[i+1*k], a[i+2*k], ..., a[i+c*k]]
#Extraire tous les 3 éléments de l'ensemble
a[::3] #[0, 3, 6, 9]
#Sortez tous les deux éléments en découpant
a[2:8:2] #[2, 4, 6]

Si la valeur du pas (ʻa [:: k ← this guy] `) est un entier positif, le pas est basé sur l'élément découpé (pensez-y). À propos, ** "0" ne peut pas être spécifié pour la valeur de pas ** </ font> (spécification).

Bien entendu, le découpage par étapes est également possible en omettant les points de départ et d'arrivée.

#5 à partir du point de départ(6-1)Extraire toutes les deux secondes des éléments
a[:6:2] #[0, 2, 4]
#Extraire tous les deux éléments du 7 au point final
a[7::2] #[7, 9]

Étape tranche par derrière

Si la valeur du pas est définie sur un nombre négatif, elle sera retirée par étapes dans ** ordre inverse (← important) **.

#Par derrière en utilisant un nombre négatif
a[::-3] #[9, 6, 3, 0]

Si vous voulez que la valeur de l'étape soit un entier négatif, je pense qu'il est fondamentalement préférable de l'utiliser uniquement de cette manière (la raison sera décrite plus tard).

Application de la tranche d'étape

* Cette section n'a rien à voir avec la ligne principale, vous pouvez donc la sauter. </ font>

Si vous souhaitez découper la valeur du pas en un entier négatif, ce sera comme suit. Mais c'est difficile. Par conséquent, vous ne souhaiterez peut-être pas l'utiliser car il est difficile de comprendre ce que vous faites dans une révision de code ou lorsque vous y reviendrez plus tard.

#Éléments du 7 au point de départ-Sortez tous les deux
a[7::-2] # [7, 5, 3, 1]
#Le 5ème élément à partir du point final-Sortez tous les deux
a[:4:-2] # [9, 7, 5]
#Les 8ème au 3ème éléments-Sortez tous les deux
a[8:2:-2] # [8, 6, 4]
# -De la seconde-Jusqu'à 7 éléments-Sortez tous les 3
a[-2:-8:-3] # [8, 5]

En fait, seulement dans ce cas (lorsque la valeur de pas est un entier négatif), conceptuellement, "retirer les ** j + 1 ** èmes éléments du i-ème élément tous les k". (Si la valeur de i ou j est omise dans toutes les tranches, les règles ci-dessus ne s'appliquent pas.) Notez également que contrairement à d'autres cas, la relation est ** i> j **.

Rappelez-vous que ** dans l'ordre inverse **, que j'ai mentionné plus tôt comme important. Si k <0, il semble bon de penser que la relation de grandeur est également inversée pour i et j. (Si vous inversez le positif et le négatif de chaque partie en mathématiques, il se peut que la relation de grandeur soit inversée près de l'image.)

S'il vous plaît, attendez! Inversez avec des tranches! !!

Pour le moment. Cela n'a pas d'importance, mais si vous regardez ici et utilisez python, vous pouvez facilement créer des phrases à lire du côté opposé 3 Entrez avec la sensation des minutes de cuisson. (**! L'histoire d'Augi Hum Amirep Zekamashi x Tanako ** sans ancre)

konata = 'Ancre de figurine premium Konata x Shimakaze!'
print(''.join(reversed(konata)))
#!! Suppression de l'ancre Sumashi Augi Hum Amirep Zekamashi x Tanako

Mais malheureusement, je n'aime pas cette méthode car elle crée une fois un objet dans la partie inversée (konata). Soyez plus intelligent! !! Je cherchais diverses choses! !! Familier, débordement de pile Best way to create a “reversed” list in Python?

Ceux qui ont lu du haut l'ont déjà remarqué. Ce sera comme suit.

print(konata[::-1])
#Notation de métamorphose: imprimer(konata[-1:0 - len(konata):-1])
#!! Suppression de l'ancre Sumashi Augi Hum Amirep Zekamashi x Tanako

Very very very very SMART!! Je suis trop excité. De plus, comme vous pouvez le voir sur le lien ci-dessus, cela semble être rapide. (Je n'ai pas vérifié) À cet égard également, c'est ** SMART **.

Résumé

** Si vous le faites dans l'ordre inverse, faites-le [liste ou chaîne de caractères] [:: -1]! !! ** **

[Bonus] Théorème de tranche (?)

Pour [liste ou chaîne de caractères] [i: j: k], si la valeur de pas k n'est pas spécifiée, elle est définie comme k = 1 (selon les spécifications). De plus, [i = len ([liste ou chaîne de caractères]) + i quand i <0] [j = len ([liste ou chaîne de caractères]) + j quand j <0]. À ce moment-là, ce qui suit tient.

  1. Lorsque k> 0, "de i-ème à j-extrait le premier élément tous les k (i <j)"
  2. Lorsque k <0, "extraire tous les k éléments du ième au j + 1er élément (i> j)"

Cependant, il n'est pas établi lorsque la valeur de i ou j est omise.

référence

Chapitre 4 Type intégré - 4.6.1 Opération de séquence commune

Recommended Posts