Versuchen wir, 100 natürliche Sprachen anzuklopfen, die bei Python auf der Straße beliebt sind. Ich denke, es gibt verschiedene Möglichkeiten, es zu lösen, deshalb möchte ich Ihnen verschiedene Möglichkeiten zeigen, es zu lösen. Natürlich ist es nicht möglich, alle Lösungen abzudecken. Wenn Sie Fragen zu "Es gibt eine solche Lösung" oder "Das ist falsch" haben, teilen Sie uns dies bitte in den Kommentaren mit.
Sprachverarbeitung 100 Knock 2020 ist das Inui Suzuki Laboratory der Tohoku University. /) Dies ist das Lehrmaterial, das in der Studiengruppe Programmiergrundforschung verwendet wird. Weitere Informationen finden Sie unter Über 100 Sprachverarbeitungsklopfen.
1. Frage | 2. Frage | 3. Frage | 4. Frage | 5. Frage | 6. Frage | 7. Frage | 8. Frage | 9. Frage | 10. Frage | |
---|---|---|---|---|---|---|---|---|---|---|
Kapitel 1 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
Kapitel 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
Kapitel 3 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
Kapitel 4 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
Kapitel 5 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
Kapitel 6 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
Kapitel 7 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
Kapitel 8 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
Kapitel 9 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
Kapitel 10 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
[00. Umgekehrte Reihenfolge der Zeichenfolgen](https://nlp100.github.io/ja/ch01.html#00-%E6%96%87%E5%AD%97%E5%88%97%E3%81% Das Problem von AE% E9% 80% 86% E9% A0% 86) ist wie folgt.
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
Wenn Sie die Frage lesen, lautet die Antwort "Desserts", da es darum geht, eine Reihe von "gestressten" in umgekehrter Reihenfolge zu erhalten. Alle Antworten unten geben "Desserts" zurück, wenn der letzte Ausdruck ausgewertet wird.
Es gibt eine Methode, um es gehorsam am Anfang der Zeichenfolge hinzuzufügen.
In Python können Sie Zeichenfolgen mit +
kombinieren, um eine neue Zeichenfolge zu generieren.
#einfach
s = "stressed"
result = ""
for c in s:
result = c + result
result #=> 'desserts'
Es ist zu einfach, um funktionsfähig zu sein, aber es kann durch eine Kombination von Funktionen ausgedrückt werden. Die Funktion "umgekehrt" gibt einen Iterator zurück, der bei einem Iterator in umgekehrter Reihenfolge abgerufen werden kann. Verketten Sie ihn daher mit leeren Zeichen, um das gewünschte Ergebnis zu erhalten.
#Funktionell
s = "stressed"
"".join(reversed(s)) #=> 'desserts'
Pythonic
Python-ähnlich zu sein heißt ** Pythonic **, aber ist dieser Code der pythonischste?
Die Methode für den Zugriff auf eine Liste oder Zeichenfolge mit s [start: end: step]
wird als Slicing bezeichnet.
Die Angabe von "-1" für "Schritt" kehrt die Reihenfolge um. Es geht um "-1".
# Pythonic
s = "stressed"
s[::-1] #=> 'desserts'
Es gibt auch die folgende Methode, die die oben genannten kombiniert. Wenn Sie am Ende oder am Anfang der Zeichenfolge etwas hinzufügen, wird es kopiert, und wenn Sie ein anderes Element als das Ende der Liste hinzufügen, wird es kopiert. Um dies zu vermeiden, füge ich am Ende der Liste ein Element hinzu und setze es dann mit "". Join ".
#Eine Kombination aus einfach und funktional
s = "stressed"
l = []
for c in reversed(s):
l.append(c)
"".join(l) #=> 'desserts'
Es gibt auch eine Methode, um gehorsam nach Index zu drehen.
für n im Bereich (len (s)):
ist eine der Syntaxen zum Drehen für einen Index.
len (s)
gibt die Länge des Strings s
zurück und range (n)
gibt den Iterator zum Durchlaufen von 0, ..., n-1
zurück.
#Führen Sie den Vorgang wie von Ihnen selbst umgekehrt aus
s = "stressed"
l = []
for n in range(len(s)):
l.append(s[len(s)-n-1])
"".join(l) #=> 'desserts'
Es gibt eine andere Möglichkeit zum Indizieren.
enumerate (s)
ist ein Iterator zum Scannen von (0, s [0]), ..., (n-1, s [n-1])
mit n = len (s)
Kehrt zurück.
Ich benutze auch "_", um Variablen zu bezeichnen, die ich nicht benutze. Ich habe es einfach reingelegt.
#Führen Sie den Vorgang wie von Ihnen selbst umgekehrt aus
s = "stressed"
l = []
for n,_ in enumerate(s):
l.append(s[len(s)-n-1])
"".join(l) #=> 'desserts'
Sie können auch in Listeneinschlussnotation schreiben.
s = "stressed"
l = [c for c in reversed(s)]
"".join(l) #=> 'desserts'
Wenn Sie jedoch sorgfältig darüber nachdenken, denken Sie möglicherweise, dass die Notation für die Einbeziehung des Generators in Ordnung ist.
s = "stressed"
g = (c for c in reversed(s))
"".join(g) #=> 'desserts'
Anschließend wird zum folgenden Funktionstyp zurückgekehrt.
#Funktionell
s = "stressed"
"".join(reversed(s)) #=> 'desserts'
Ich denke, jede Person hat ihren eigenen Geschmack, aber meine Lieblingsantwort ist unten.
#Eine Kombination aus einfach und funktional
s = "stressed"
l = []
for c in reversed(s):
l.append(c)
"".join(l) #=> 'desserts'
Es ist leicht zu verstehen, dass die for-Anweisung das Gefühl vermittelt, sie in die entgegengesetzte Richtung drehen zu wollen, und dass Elemente gehorsam zur Liste hinzugefügt werden.
Wenn ich ein tatsächliches Problem löse, schreibe ich oft den Prozess der Verarbeitung jedes Elements und füge es in eine andere Liste ein, so dass es die Grundform ist.
" ". Join (umgekehrt (s))
und s [:: -1]
eignen sich hervorragend zur Lösung dieses Problems, erschweren jedoch das Hinzufügen zusätzlicher Verarbeitung.
Recommended Posts