Ich werde "100 Language Processing Knock 2015" machen, um Programme und Python zu studieren! http://www.cl.ecei.tohoku.ac.jp/nlp100/
Vorerst denke ich darüber nach, es einzeln zu aktualisieren. (Vielleicht wird es ziemlich langsam ...) Ich werde es einzeln auf GitHub aktualisieren.
Geben Sie zuerst den Code ein, den Sie selbst geschrieben haben. Danach werde ich nachschlagen und den Schreibstil veröffentlichen, den ich für besser hielt.
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
Ich denke, es gibt einen kurzen Weg, es zu schreiben, Ich konnte nicht daran denken, weil ich zu unerfahren war, also entschied ich mich für eine sehr schlammige Methode ...
knock000.py
s = "stressed"
def reverse(s: str) -> str:
list = []
for char in s:
list.insert(0, char)
return "".join(list)
print(reverse(s))
python
s = "stressed"
print(s[::-1])
Es scheint, dass ich es so kurz schreiben kann. .. ..
Überprüfung der String-Slices
python
str = "I have a dream!"
#Grundstr[Der Erste:letzte]
str[0:6]
#=> 'I have'
#Die Spezifikation kann weggelassen werden (wenn weggelassen, alle oder bis zum Ende?)
str[:10]
#=> 'I have a d'
str[3:]
#=> 'ave a dream!'
#Sie können auch die Anzahl der Schritte str angeben[Der Erste:letzte:Anzahl der Schritte]
str[0:12:3]
#=> 'Ia d'
Damit
python
s[::-1]
Dies bedeutet "von Anfang bis Ende eins nach dem anderen" = umgekehrte Reihenfolge.
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
Obwohl der numerische Wert direkt angegeben wird
knock001.py
s = "Patatoku Kashii"
print(s[0] + s[2] + s[4] + s[6])
Alle sind gerade. Wenn Sie sie also in einer Schleife drehen und sie gerade sind, ist es richtig, auf ähnliche Weise zu schreiben? ??
Diesmal keine
Nachtrag: Ich werde es hinzufügen, weil Sie im Kommentar darauf hingewiesen haben. Wie bei 00 können Sie die Anzahl der Schritte angeben und wie folgt in Slices schreiben.
python
s = "Patatoku Kashii"
print(s[::2])
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
knock002.py
s1 = "Pat Auto"
s2 = "Taxi"
s3 = ""
for i in range(len(s1)):
s3 = s3 + s1[i] + s2[i]
print(s3)
Ich finde, dass das Argument len (s1) von range nicht cool ist. Da die angegebene Zeichenfolge die gleiche Anzahl von Zeichen enthält, fühlt es sich in Ordnung an.
Diesmal keine (Ich bin der Meinung, dass diese Methode nicht gut ist, daher werde ich diesen Punkt nur festlegen, wenn ich etwas überprüft habe.)
Nachtrag: Es scheint, dass Sie die Zip-Funktion bei len (s1) verwenden können.
python
for char1, char2 in zip(s1, s2):
s3 = s3 + char1 + char2
Die Zip-Funktion verarbeitet mehrere Argumente gleichzeitig in einer Schleife.
Nachtrag Nachtrag: Sie haben in den Kommentaren darauf hingewiesen.
python
for char1, char2 in zip(s1, s2):
s3 = s3 + char1 + char2
Wenn Sie die Zeichenketten wie oben beschrieben verbinden, ist dies langsam, da bei jedem Durchlaufen der Schleife neuer Speicher zugewiesen wird. Es scheint also besser, eine Liste mit Zeichenketten zu erstellen und diese am Ende mit join zu reiben.
Was du mir unten beigebracht hast
python
print(''.join([char1 + char2 for char1, char2 in zip(s1, s2)]))
Teilen Sie den Satz "Jetzt brauche ich nach den schweren Vorlesungen über Quantenmechanik einen Alkoholiker auf." In Wörter auf und erstellen Sie eine Liste mit der Anzahl der (alphabetischen) Zeichen in jedem Wort in der Reihenfolge ihres Auftretens.
python
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
words = s.split(" ")
char_count = []
for word in words:
char_count.append(len(word))
print(char_count)
Nachtrag: Sie haben in den Kommentaren darauf hingewiesen. Es scheint, dass Sie präzise schreiben können, wenn Sie die Listeneinschlussnotation verwenden Und da die Standardeinstellung für die Aufteilungsfunktion leer ist, müssen Sie die Leerstelle anscheinend nicht einzeln angeben. Darüber hinaus scheint es, dass Sie entfernen müssen, und. .. ..
Ich werde auflisten, was Sie mir in den Kommentaren unten gesagt haben Es scheint jedoch, dass sich die Spezifikationen pro Übersetzung in Python3.4 geändert haben, daher habe ich sie wie folgt umgeschrieben
python
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print([len(word.translate(word.maketrans({".":None,",":None}))) for word in s.split()])
Ich kann es nicht gut schreiben, daher besteht eine andere Methode darin, einen regulären Ausdruck anzugeben und ihn zu ersetzen (diesmal löschen).
python
import re
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
pat = re.compile('[.,]')
print([len(pat.sub('', word)) for word in s.split()])
Brechen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch eine Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen und das assoziative Array (Wörterbuchtyp oder Kartentyp) von der extrahierten Zeichenfolge bis zur Position des Wortes (welche Anzahl von Wörtern von Anfang an) Erstellen.
python
s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
s = s.replace(".", "")
words = s.split(" ")
words_index = {}
for i, word in enumerate(words):
if i in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
words_index[word[:1]] = i
else:
words_index[word[:2]] = i
print(words_index)
Nachtrag: Ich erhielt einen Kommentar, der darauf hinwies, dass es falsch war
Die folgende modifizierte Version
python
s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
s = s.replace(".", "")
words = s.split(" ")
words_index = {}
for i, word in enumerate(words):
n = i + 1
if n in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
words_index[word[:1]] = n
else:
words_index[word[:2]] = n
print(words_index)
Danach ist die Zuweisung in for redundant, sodass die folgende im Kommentar angegebene Schreibmethode einfacher ist
python
for i, word in enumerate(words):
n = i + 1
l = 1 if n in (1, 5, 6, 7, 8, 9, 15, 16, 19) else 2
words_index[word[:l]] = n
Recommended Posts