Dies ist das erste Kapitel von Knock 100 Language Processing.
Die Umgebung ist Windows 10, Python 3.6.0. Ich habe auf [hier] verwiesen (http://qiita.com/piyo56/items/eb72b496669f541055c3).
Holen Sie sich eine Zeichenfolge mit den Buchstaben "gestresst" umgekehrt.
# coding: utf-8
target = "stressed"
new_target = target[::-1]
print(new_target)
desserts
Der Standardwert ist 0,8, wenn der Schritt positiv ist, 8,0, wenn der Schritt negativ ist
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
# coding: utf-8
word = "Patatoku Kashii"
new_word = word[::2]
print(new_word)
Pat Auto
** Vergiss dich nicht. ** ** **
Holen Sie sich die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Taxi" von Anfang an abwechselnd verbinden.
# cording utf-8
word1 = u"Pat Auto"
word2 = u"Taxi"
mix_word = ""
for w1,w2 in zip (word1,word2):
mix_word += w1 + w2
print(mix_word)
Patatoku Kashii
--Zip passend zum längeren
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2)
print(list(zipped))
[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', None), ('5', None)]
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2,fillvalue = False )
print(list(zipped))
[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', False), ('5', False)]
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2,fillvalue = False )
zipped_list = list(zipped)
zizipped = zip(zipped_list[0],zipped_list[1],zipped_list[2],zipped_list[3],zipped_list[4])
print(list(zizipped))
[('1', '2', '3', '4', '5'), ('a', 'b', 'c', False, False)]
-Ver Verwendung von *
import itertools
target1 = '12345'
target2 = 'abc'
zipped = itertools.zip_longest(target1,target2,fillvalue = False )
zipped_list = list(zipped)
zizipped = zip(*zipped_list)
print(list(zizipped))
[('1', '2', '3', '4', '5'), ('a', 'b', 'c', False, False)]
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.
words = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = []
new_words = words.translate(str.maketrans("","",",."))
for word in new_words.split(' '):
word_length = len(word)
result.append(word_length)
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
Strip entfernt die angegebene Zeichenfolge von beiden Enden.
str.translate(str.maketrans("","",".,"))
Der 1. → 2. und 3. Faktor sind die Zeichenfolgen, die Sie löschen möchten.
words = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = [len(word.strip(",.")) for word in words.split(" ")]
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
import re
words = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = [len(word) for word in (re.sub(r"[,.]","",words).split(" "))]
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
Teilen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch die Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, 19 auf Das erste 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 Wortposition (welche Anzahl von Wörtern von Anfang an) wird erstellt. Erstelle es.
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
words = [word.strip(',.') for word in sentence.split()]
dic = {word[0]:words.index(word) + 1 for word in words if words.index(word) in (0,4,5,6,7,8,14,15,18)}
dic.update({word[:2]:words.index(word) + 1 for word in words if words.index(word) not in (0,4,5,6,7,8,14,15,18)})
print(dic)
{'H': 1, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'P': 15, 'S': 16, 'K': 19, 'He': 2, 'Li': 3, 'Be': 4, 'Ne': 10, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'Cl': 17, 'Ar': 18, 'Ca': 20}
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
words = [word.strip(',.') for word in sentence.split()]
link = {}
for i,v in enumerate(words,1):
length = 1 if i in [1,5,6,7,8,9,15,16,19] else 2
link.update({v[:length]:i})
print(link)
{'H': 1, 'He': 2, 'Li': 3, 'Be': 4, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'Ne': 10, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'P': 15, 'S': 16, 'Cl': 17, 'Ar': 18, 'K': 19, 'Ca': 20}
sentence ="Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
#Erster Charakter(Oder 2 Buchstaben)Und erstellen Sie ein Wörterbuch, das den Index dieses Wortes verknüpft
link = {w[:2-(i in (1,5,6,7,8,9,15,16,19))]:i for i,w in enumerate(sentence.split(),1)}
print(link)
{'H': 1, 'He': 2, 'Li': 3, 'Be': 4, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'Ne': 10, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'P': 15, 'S': 16, 'Cl': 17, 'Ar': 18, 'K': 19, 'Ca': 20}
Verwendung des Booleschen Wertes True = 1 False = 0
import re
sentence_string = "I am an NLPer"
sentence_list = sentence_string.split()
def n_gram(sequence,n):
u"""Zeichen bi, wenn es als Zeichenfolge übergeben wird-gram,Das Wort bi, wenn es als Liste übergeben wird-Als Gramm behandelt.
"""
result = []
if isinstance(sequence,str):
sequence = list(re.sub("[,. ]","",sequence))
for i in range(len(sequence)- n+1):
result.append('-'.join(sequence[i:i+n]))
return result
print(n_gram(sentence_string,2))
print(n_gram(sentence_list,2))
['I-a', 'a-m', 'm-a', 'a-n', 'n-N', 'N-L', 'L-P', 'P-e', 'e-r']
['I-am', 'am-an', 'an-NLPer']
import re
sentence_string = "I am an NLPer"
sentence_list = sentence_string.split()
def n_gram(sequence, n):
u"""Zeichen bi, wenn es als Zeichenfolge übergeben wird-gram,Das Wort bi, wenn es als Liste übergeben wird-Als Gramm behandelt.
"""
if isinstance(sequence, str):
sequence = list(re.sub("[,. ]", "", sequence))
return ['-'.join(sequence[i:i+n])
for i in range(len(sequence) - n + 1)]
print(n_gram(sentence_string, 2))
print(n_gram(sentence_list, 2))
Sie können die Einschlussnotation verwenden. ..
Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie den Summensatz, den Produktsatz und den Differenzsatz von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.
import re
X = "paraparaparadise"
Y = "paragraph"
def n_gram(sequence,n):
result = []
if isinstance(sequence,str):
sequence = list(re.sub("[,. ]","",sequence))
for i in range(len(sequence)- n+1):
result.append('-'.join(sequence[i:i+n]))
return result
X = (set(n_gram(X,2)))
Y = (set(n_gram(Y,2)))
print("X:",X)
print("Y:",Y)
print("Summensatz:",X | Y)
print("Produktset:",X & Y)
print("Differenzsatz 1:",X - Y)
print("Differenzsatz 2:",Y - X)
if 's-e' in X:
print('se ist in X enthalten')
if 's-e' in Y:
print('se ist in Y enthalten')
X: {'a-d', 'a-r', 'r-a', 'i-s', 's-e', 'd-i', 'p-a', 'a-p'}
Y: {'a-r', 'r-a', 'p-h', 'g-r', 'a-g', 'p-a', 'a-p'}
Summensatz: {'a-r', 'i-s', 'p-a', 'a-p', 'a-d', 'r-a', 'p-h', 'g-r ',' s-e ',' d-i ',' a-g '} Produktmenge: {'p-a', 'a-p', 'a-r', 'r-a'} Differenzsatz 1: {'a-d', 'd-i', 's-e', 'i-s'} Differenzsatz 2: {'a-g', 'g-r', 'p-h'} se ist in X enthalten
Implementieren Sie eine Funktion, die die Argumente x, y, z verwendet und die Zeichenfolge "y bei x ist z" zurückgibt. Setzen Sie außerdem x = 12, y = "Temperatur", z = 22,4 und überprüfen Sie das Ausführungsergebnis.
def make_sentence(x,y,z):
print(u"{0}von Zeit{1}Ist{2}".format(x,y,z))
make_sentence(x = 12,y = "Temperatur",z = 22.4)
Die Temperatur um 12:00 Uhr beträgt 22,4
Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge gemäß den folgenden Spezifikationen konvertiert.
import re
pat = re.compile(u"[a-z]")
def cipher(string):
return ''.join(chr(219-ord(c)) if pat.match(c) else c for c in string)
if __name__ == "__main__":
sentence = u"Hello world!"
ciphertext = cipher(sentence)
print(sentence)
print(ciphertext)
print(cipher(ciphertext))
re.compile('[a-z]')
Hello world!
Hvool dliow!
Hello world!
--Regular Expression Non-Use-Version (von Shiracamus)
def cipher(string):
return ''.join(chr(219 - ord(c)) if c.islower() else c for c in string)
if __name__ == "__main__":
sentence = u"Hello world!"
ciphertext = cipher(sentence)
print(sentence)
print(ciphertext)
print(cipher(ciphertext))
Sie können str.islower () verwenden. str.islower () scheint "True" zu sein, auch wenn es sich um eine Zeichenfolge handelt, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird.
chr(i) Gibt eine Zeichenfolge zurück, die ein Zeichen darstellt, dessen Unicode-Codepunkt die Ganzzahl i ist. Beispielsweise gibt chr (97) die Zeichenfolge 'a' und chr (8364) die Zeichenfolge '€' zurück. Das Gegenteil von ord ().
Der gültige Argumentbereich liegt zwischen 0 und 1.114.111 (0x10FFFF hexadezimal). ValueError wird ausgelöst, wenn i außerhalb des Bereichs liegt.
from random import shuffle
def change_order(sentence):
produced_word_list = []
word_list = sentence.split(' ')
for word in word_list:
if len(word) <= 4:
produced_word_list.append(word)
else:
middle = list(word[1:-1])
shuffle(middle)
produced_word = word[0] + ''.join(middle) + word[-1]
produced_word_list.append(produced_word)
return ' '.join(produced_word_list)
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(change_order(sentence))
I cnud'olt bvieele that I cluod aucltaly uestradnnd what I was reading : the pnemonaehl power of the huamn mind .
--Eine andere Lösung
import random
def change_order(sentence):
produced_word_list = []
word_list = sentence.split(' ')
for word in word_list:
if len(word) <= 4:
produced_word_list.append(word)
else:
middle_list = list(word[1:-1])
new_middle = ''
while len(middle_list) > 0:
rnd = random.randint(0,len(middle_list)-1)
new_middle += middle_list.pop(rnd)
new_word = word[0] + new_middle + word[-1]
produced_word_list.append(new_word)
return ' '.join(produced_word_list)
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(change_order(sentence))
I cl'oundt beevile that I culod aauctlly unnetdarsd what I was rdeaing : the pneoenhaml peowr of the haumn mind .
--Generator und random.shuffle Version (von Shiracamus)
import random
def change_order(sentence):
def produced_words():
word_list = sentence.split()
for word in word_list:
if len(word) <= 4:
yield word
else:
middle = list(word[1:-1])
random.shuffle(middle)
yield word[0] + ''.join(middle) + word[-1]
return ' '.join(produced_words())
sentence = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print(change_order(sentence))
Ich war nur nicht gut in Generatoren, aber da es eine große Sache war, Klassen und Iteratoren tauchen in die japanische Version von Python 3 ein Python-Iterator Ich versuchte mit Bezug auf zu verstehen. ..
Der Generator ist
Ist es in Ordnung zu erkennen, dass die for-Anweisung die Methoden next ()
und iter ()
enthält und die Methoden __iter__
, __next__
in der Generatorfunktion (?) Aufruft? ..
Das Iteratorobjekt verfügt über zwei Methoden:
Die Methode __iter__
gibt sich selbst zurück, und die Methode __next__
gibt das nächste Element zurück.
Anmerkung aus Klassen und Iteratoren tauchen in die japanische Version von Python 3 ein
>>> import plural6
>>> r1 = plural6.LazyRules()
>>> r2 = plural6.LazyRules()
>>> r1.rules_filename ①
'plural6-rules.txt'
>>> r2.rules_filename
'plural6-rules.txt'
>>> r2.rules_filename = 'r2-override.txt' ②
>>> r2.rules_filename
'r2-override.txt'
>>> r1.rules_filename
'plural6-rules.txt'
>>> r2.__class__.rules_filename ③
'plural6-rules.txt'
>>> r2.__class__.rules_filename = 'papayawhip.txt' ④
>>> r1.rules_filename
'papayawhip.txt'
>>> r2.rules_filename ⑤
'r2-overridetxt'
(1) Jede Instanz dieser Klasse erbt das Attribut rules_filename, dessen Wert in der Klasse definiert ist. (2) Das Ändern des Attributwerts einer Instanz wirkt sich nicht auf den Attributwert anderer Instanzen aus ... ③ …… Ändern Sie nicht die Klassenattribute. Sie können auf Klassenattribute (und nicht auf die Attribute einzelner Instanzen) verweisen, indem Sie das spezielle Attribut class verwenden, um auf die Klasse selbst zuzugreifen. (4) Wenn das Klassenattribut geändert wird, ist die Instanz (in diesem Fall r1) betroffen, die den Wert noch erbt. ⑤ Die Instanz, die das Attribut überschreibt (in diesem Fall r2), ist nicht betroffen.
Einzelne Instanzen und Klasseninstanzen sind unterschiedlich.
sample1.py
class MyIterator(object):
def __init__(self, *numbers):
self._numbers = numbers
self._i = 0
def __iter__(self):
# next()Wird von self implementiert, gibt es self so zurück, wie es ist
return self
def next(self):
if self._i == len(self._numbers):
raise StopIteration()
value = self._numbers[self._i]
self._i += 1
return value
my_iterator = MyIterator(10, 20, 30)
for num in my_iterator:
print 'hello %d' % num
sample2.py
class Fib:
'''iterator that yields numbers in the Fibonacci sequence'''
def __init__(self, max):
self.max = max
def __iter__(self):
self.a = 0
self.b = 1
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
Warum gibt es einen Fall, in dem "next" eine spezielle Methode "next" ist und einen Fall, in dem es sich um eine normale Methode "next" in der Klasse handelt?
Das __next__
in der Klasse wird von der externen Methodenext
aufgerufen, während das next
in der Klasse in der Klasse (?) Ausgeführt wird.
Ich verstehe nicht.
Recommended Posts