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.
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.
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](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).
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.
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'
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'
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'
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'
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'
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