Je vais faire "100 Language Processing Knock 2015" pour étudier les programmes et Python! http://www.cl.ecei.tohoku.ac.jp/nlp100/
Pour le moment, je pense à le mettre à jour un par un. (Peut-être que ce sera assez lent ...) Je vais le mettre à jour sur GitHub un par un.
Tout d'abord, mettez le code que vous avez écrit vous-même. Après cela, je vais chercher et publier le style d'écriture que je pensais être meilleur.
Récupère une chaîne dans laquelle les caractères de la chaîne "accentués" sont disposés à l'envers (de la fin au début).
Je pense qu'il y a un moyen court de l'écrire, Je ne pouvais pas y penser car j'étais trop inexpérimenté, alors j'ai décidé d'utiliser une méthode très boueuse ...
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])
Il semble que je puisse l'écrire si brièvement. .. ..
Examen des tranches de chaîne
python
str = "I have a dream!"
#Str de base[la première:dernier]
str[0:6]
#=> 'I have'
#La spécification peut être omise (si omise, tout ou jusqu'à la fin?)
str[:10]
#=> 'I have a d'
str[3:]
#=> 'ave a dream!'
#Vous pouvez également spécifier le nombre d'étapes str[la première:dernier:Nombre d'étapes]
str[0:12:3]
#=> 'Ia d'
Alors
python
s[::-1]
Cela signifie "du début à la fin un par un de l'opposé" = ordre inverse.
Retirez les 1er, 3e, 5e et 7e caractères de la chaîne de caractères "Patatokukashi" et récupérez la chaîne de caractères concaténée.
Bien que la valeur numérique soit spécifiée directement
knock001.py
s = "Patatoku Kashii"
print(s[0] + s[2] + s[4] + s[6])
Tous sont pairs, donc si vous les tournez en boucle et qu'ils le sont, est-il correct de les écrire de la même manière? ??
Aucun cette fois
Post-scriptum: Je vais l'ajouter parce que vous l'avez souligné dans le commentaire. Comme avec 00., Vous pouvez spécifier le nombre d'étapes et écrire comme suit en tranches.
python
s = "Patatoku Kashii"
print(s[::2])
Récupérez la chaîne de caractères "Patatokukashi" en reliant alternativement les caractères "Pattocar" + "Tax" depuis le début.
knock002.py
s1 = "Voiture Pat"
s2 = "Taxi"
s3 = ""
for i in range(len(s1)):
s3 = s3 + s1[i] + s2[i]
print(s3)
J'ai l'impression que l'argument len (s1) de range n'est pas cool. Puisque la chaîne de caractères donnée a le même nombre de caractères, cela ne pose pas de problème.
Aucun cette fois (Je pense que cette méthode n'est pas bonne, donc je ne définirai cet élément que s'il y a quelque chose que j'ai vérifié.)
Post-scriptum: Il semble que vous puissiez utiliser la fonction zip à len (s1)
python
for char1, char2 in zip(s1, s2):
s3 = s3 + char1 + char2
La fonction zip traite plusieurs arguments dans une boucle en même temps.
Addendum Addendum: Vous l'avez souligné dans les commentaires.
python
for char1, char2 in zip(s1, s2):
s3 = s3 + char1 + char2
Si vous connectez les chaînes de caractères comme ci-dessus, cela sera lent car une nouvelle mémoire sera allouée à chaque fois que la boucle tournera. Il semble donc préférable de faire une liste de chaînes de caractères, puis de la frotter avec une jointure à la fin.
Ce que tu m'as appris ci-dessous
python
print(''.join([char1 + char2 for char1, char2 in zip(s1, s2)]))
Décomposez la phrase «Maintenant j'ai besoin d'un verre, alcoolique bien sûr, après les lourdes conférences de mécanique quantique.» En mots, et créez une liste du nombre de caractères (alphabétiques) de chaque mot par ordre d'apparition.
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)
Post-scriptum: Vous l'avez souligné dans les commentaires. Il semble que vous puissiez écrire de manière concise si vous utilisez la notation d'inclusion de liste Et comme la fonction par défaut de la fonction de fractionnement est vide, il semble que vous n'ayez pas à spécifier le vide un par un. De plus, il semble que vous deviez supprimer, et. .. ..
Je vais lister ce que vous m'avez dit dans les commentaires ci-dessous Cependant, il semble que les spécifications par traduction aient changé dans python3.4, donc je l'ai réécrit comme suit
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()])
Je ne peux pas bien l'écrire, donc une autre méthode consiste à spécifier une expression régulière et à la remplacer (supprimer cette fois).
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()])
Casser la phrase "Salut, il a menti parce que le bore ne pouvait pas oxyder le fluor. De nouvelles nations pourraient également signer une clause de sécurité de paix. Arthur King Can." En mots 1, 5, 6, 7, 8, 9, 15, 16, Le 19e mot est le premier caractère et les autres mots sont les deux premiers caractères. Créer.
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)
Post-scriptum: J'ai reçu un commentaire indiquant que c'était faux
La version modifiée suivante
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)
Après cela, l'affectation de for est redondante, donc la méthode d'écriture suivante donnée dans le commentaire est plus simple
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