[PYTHON] Résolvez 100 traitements linguistiques Knock 2020 (00. Ordre inverse des chaînes de caractères)

introduction

Essayons de frapper 100 langages naturels populaires dans la rue avec Python. Je pense qu'il y a plusieurs façons de le résoudre, alors j'aimerais vous montrer différentes façons de le résoudre. Bien entendu, il n'est pas possible de couvrir toutes les solutions. Si vous avez des questions telles que "Il existe une telle solution" ou "Je me trompe ici", merci de me le faire savoir dans les commentaires.

Qu'est-ce que 100 Language Processing Knock 2020?

Language processing 100 knock 2020 est Inui Suzuki Laboratory de l'Université de Tohoku. /) Il s'agit du matériel pédagogique utilisé dans le Groupe d'étude de la recherche fondamentale en programmation. Pour plus de détails, reportez-vous à Environ 100 coups de traitement de la langue.

Lien vers l'article Qiita

1ère question 2ème question 3e question 4e question 5ème question 6ème question 7e question 8ème question 9ème question 10e question
Chapitre 1 00 01 02 03 04 05 06 07 08 09
Chapitre 2 10 11 12 13 14 15 16 17 18 19
chapitre 3 20 21 22 23 24 25 26 27 28 29
Chapitre 4 30 31 32 33 34 35 36 37 38 39
Chapitre 5 40 41 42 43 44 45 46 47 48 49
Chapitre 6 50 51 52 53 54 55 56 57 58 59
Chapitre 7 60 61 62 63 64 65 66 67 68 69
Chapitre 8 70 71 72 73 74 75 76 77 78 79
Chapitre 9 80 81 82 83 84 85 86 87 88 89
Chapitre 10 90 91 92 93 94 95 96 97 98 99

00. Ordre inverse des chaînes

problème

[00. Ordre inverse des chaînes](https://nlp100.github.io/ja/ch01.html#00-%E6%96%87%E5%AD%97%E5%88%97%E3%81% Le problème de AE% E9% 80% 86% E9% A0% 86) est le suivant.

Obtenez une chaîne dans laquelle les caractères de la chaîne «souligné» sont disposés à l'envers (de la fin au début).

répondre

Si vous lisez la question, la réponse est «desserts» car il s'agit d'obtenir une chaîne de «stressé» à l'envers. Toutes les réponses ci-dessous renverront «desserts» lorsque la dernière expression sera évaluée.

Facile

Il existe une méthode pour l'ajouter au début de la chaîne de caractères avec obéissance. En Python, vous pouvez combiner des chaînes avec + pour générer une nouvelle chaîne.

#Facile
s = "stressed"

result = ""
for c in s:
    result = c + result
result #=> 'desserts'

Fonctionnel

C'est trop simple pour être fonctionnel, mais cela peut être exprimé par une combinaison de fonctions. La fonction reverse retourne un itérateur qui est récupéré dans l'ordre inverse étant donné un itérateur, donc concaténez avec des caractères vides pour obtenir le résultat souhaité.

#Fonctionnel
s = "stressed"

"".join(reversed(s)) #=> 'desserts'

Pythonic

Être semblable à Python s'appelle ** Pythonic **, mais est-ce le code le plus pythonique? La méthode d'accès à une liste ou à une chaîne de caractères avec s [début: fin: étape] est appelée découpage. Spécifier "-1" pour "step" inverse l'ordre. Il passe par «-1».

# Pythonic
s = "stressed"

s[::-1] #=> 'desserts'

Autres réponses

combinaison

Il existe également la méthode suivante qui combine les éléments ci-dessus. Si vous ajoutez quelque chose à la fin ou au début de la chaîne, il sera copié, et si vous ajoutez un élément autre que la fin de la liste, il sera copié. Pour éviter cela, j'ajoute un élément à la fin de la liste, puis je l'enchaîne avec "" ". Join`.

#Une combinaison de simple et fonctionnel
s = "stressed"

l = []
for c in reversed(s):
    l.append(c)
"".join(l) #=> 'desserts'

Tour par index

Il existe également une méthode de rotation par index docilement. for n in range (len (s)): est l'une des syntaxes à utiliser pour un index. len (s) renvoie la longueur de la chaîne s, et range (n) retourne l'itérateur pour parcourir 0, ..., n-1.

#Effectuez le processus équivalent à inversé par vous-même
s = "stressed"

l = []
for n in range(len(s)):
    l.append(s[len(s)-n-1])
"".join(l) #=> 'desserts'

Il existe une autre façon d'indexer. ʻEnumerate (s) est un itérateur pour scanner (0, s [0]), ..., (n-1, s [n-1]) avec n = len (s) Retour. J'utilise également_` pour désigner des variables que je n'utilise pas. Je viens de le mettre.

#Effectuez le processus équivalent à inversé par vous-même
s = "stressed"

l = []
for n,_ in enumerate(s):
    l.append(s[len(s)-n-1])
"".join(l) #=> 'desserts'

Notation d'inclusion de liste

Vous pouvez également écrire en notation d'inclusion de liste.

s = "stressed"

l = [c for c in reversed(s)]
"".join(l) #=> 'desserts'

Cependant, si vous y réfléchissez attentivement, vous pouvez penser que la notation d'inclusion du générateur est correcte.

s = "stressed"

g = (c for c in reversed(s))
"".join(g) #=> 'desserts'

Ensuite, il reviendra au type fonctionnel suivant.

#Fonctionnel
s = "stressed"

"".join(reversed(s)) #=> 'desserts'

Regarder en arrière

Je pense que chaque personne a son propre goût, mais ma réponse préférée est ci-dessous.

#Une combinaison de simple et fonctionnel
s = "stressed"

l = []
for c in reversed(s):
    l.append(c)
"".join(l) #=> 'desserts'

Il est facile de comprendre que l'instruction for transmet le sentiment de vouloir la tourner dans la direction opposée et que des éléments sont ajoutés à la liste docilement. Aussi, lors de la résolution d'un problème réel, j'écris souvent le processus de traitement de chaque élément et de le mettre dans une autre liste, c'est donc la forme de base. " ". Join (reverse (s)) et s [:: -1] sont parfaits pour résoudre ce problème, mais ils rendent plus difficile l'ajout de traitement supplémentaire.

Recommended Posts

Résolvez 100 traitements linguistiques Knock 2020 (00. Ordre inverse des chaînes de caractères)
00. Ordre inverse des chaînes
100 traitements linguistiques frappent 03 ~ 05
100 coups de traitement linguistique (2020): 40
100 coups de traitement linguistique (2020): 32
100 coups de traitement linguistique (2020): 35
100 coups de traitement linguistique (2020): 47
100 coups de traitement linguistique (2020): 39
100 coups de traitement linguistique (2020): 22
100 coups de traitement linguistique (2020): 42
100 coups de traitement linguistique (2020): 29
100 coups de traitement linguistique (2020): 49
100 coups de traitement linguistique (2020): 45
100 coups de traitement linguistique (2020): 10-19
100 coups de traitement linguistique (2020): 30
100 coups de traitement linguistique (2020): 00-09
100 coups de traitement linguistique (2020): 31
100 coups de traitement linguistique (2020): 48
100 coups de traitement linguistique (2020): 44
100 coups de traitement linguistique (2020): 41
100 coups de traitement linguistique (2020): 37
100 coups de traitement linguistique (2020): 25
100 coups de traitement linguistique (2020): 23
100 coups de traitement linguistique (2020): 33
100 coups de traitement linguistique (2020): 20
100 coups de traitement linguistique (2020): 27
100 coups de traitement linguistique (2020): 46
100 coups de traitement linguistique (2020): 21
100 coups de traitement linguistique (2020): 36
100 coups de traitement du langage amateur: 41
100 coups de traitement du langage amateur: 71
100 coups de traitement du langage amateur: 56
100 coups de traitement du langage amateur: 24
100 coups de traitement du langage amateur: 59
100 coups de traitement du langage amateur: 70
100 coups de traitement du langage amateur: 60
100 coups de traitement du langage amateur: 92
100 coups de langue amateur: 30
100 coups de langue amateur: 06
100 coups de traitement du langage amateur: 84
100 coups de traitement du langage amateur: 81
100 coups de langue amateur: 33
100 coups de traitement du langage amateur: 40
100 coups de traitement du langage amateur: 45
100 coups de traitement du langage amateur: 43
100 coups de traitement du langage amateur: 55
100 coups de traitement du langage amateur: 22
100 coups de traitement du langage amateur: 61
100 coups de traitement du langage amateur: 94
100 coups de traitement du langage amateur: 54
100 coups de langue amateur: 04
100 coups de traitement du langage amateur: 63
100 coups de traitement du langage amateur: 12
100 coups de traitement du langage amateur: 14
100 coups de langue amateur: 08
100 coups de traitement du langage amateur: 42
100 coups de traitement du langage ~ Chapitre 1
100 coups de traitement du langage amateur: 19
100 coups de traitement du langage amateur: 73
100 coups de traitement du langage amateur: 75
100 coups de traitement du langage amateur: 98