[PYTHON] 4. Création d'un programme structuré

4.1 Back to the Basics Assignment

L'affectation est l'un des concepts les plus importants d'un programme. Mais il y a des choses incroyables à ce sujet! !!

>>> foo = 'Monty' 
>>> bar = foo   # (1)
>>> foo = 'Python'  # (2)
>>> bar
'Monty'

Dans le code ci-dessus, si vous écrivez bar = foo, la valeur de foo (chaîne de caractères'Monty ') dans (1) sera affectée à bar. En d'autres termes, bar est une copie de foo, donc l'écrasement de foo avec la nouvelle chaîne "Python" sur la ligne (2) n'affecte pas la valeur de bar.

L'affectation copie la valeur d'une expression, mais la valeur n'est pas toujours celle que vous attendez! !! !! En particulier, les valeurs des objets structurés comme les listes ne sont en réalité que des références aux objets! Dans l'exemple suivant, (1) assigne une référence à foo à la barre de variables. Si vous modifiez l'intérieur de foo dans la ligne suivante, la valeur de bar est également modifiée

>>> foo = ['Monty', 'Python']
>>> bar = foo  # (1)
>>> foo[1] = 'Bodkin'  # (2)
>>> bar
['Monty', 'Bodkin']

list-memory

bar = foo ne copie pas le contenu de la variable, seulement sa ** référence d'objet **! !! Il s'agit d'une référence à l'objet stocké à la position 3133 dans foo. Si vous assignez bar = foo, seule la référence d'objet 3133 sera copiée, donc la mise à jour de foo changera également bar!

Créons une variable vide contenant une liste vide et utilisons-la trois fois dans la ligne suivante pour une expérimentation plus approfondie.

>>> empty = []
>>> nested = [empty, empty, empty]
>>> nested
[[], [], []]
>>> nested[1].append('Python')
>>> nested
[['Python'], ['Python'], ['Python']]

Lorsque j'ai changé l'un des éléments de la liste, ils ont tous changé! !! ?? ?? Vous pouvez voir que chacun des trois éléments n'est en fait qu'une référence à une seule et même liste en mémoire! !!

Notez que si vous attribuez une nouvelle valeur à l'un des éléments de la liste, elle ne sera pas reflétée dans les autres éléments!

>>> nested = [[]] * 3
>>> nested[1].append('Python')
>>> nested[1] = ['Monty']
>>> nested
[['Python'], ['Monty'], ['Python']]

La troisième ligne a modifié l'une des trois références d'objet de la liste. Cependant, l'objet "Python" n'a pas changé. C'est parce que vous modifiez l'objet via la référence d'objet, sans écraser la référence d'objet!

Equality Python a deux façons de s'assurer que la paire d'éléments est la même. Teste l'opérateur pour l'identification des objets. Cela peut être utilisé pour valider les observations précédentes sur l'objet.

>>> size = 5
>>> python = ['Python']
>>> snake_nest = [python] * size
>>> snake_nest[0] == snake_nest[1] == snake_nest[2] == snake_nest[3] == snake_nest[4]
True
>>> snake_nest[0] is snake_nest[1] is snake_nest[2] is snake_nest[3] is snake_nest[4]
True

Créez une liste contenant plusieurs copies du même objet et montrez qu'elles ne sont pas seulement identiques selon ==, mais aussi un seul et même objet.

>>> import random
>>> position = random.choice(range(size))
>>> snake_nest[position] = ['Python']
>>> snake_nest
[['Python'], ['Python'], ['Python'], ['Python'], ['Python']]
>>> snake_nest[0] == snake_nest[1] == snake_nest[2] == snake_nest[3] == snake_nest[4]
True
>>> snake_nest[0] is snake_nest[1] is snake_nest[2] is snake_nest[3] is snake_nest[4]
False

La fonction id () facilite la détection!

>>> [id(snake) for snake in snake_nest]
[513528, 533168, 513528, 513528, 513528]

Cela nous indique que le deuxième élément de la liste contient un identifiant séparé!

Conditionals Dans la partie conditionnelle de l'instruction if, une chaîne ou une liste non vide est évaluée à true, et une chaîne ou une liste vide prend la valeur false.

>>> mixed = ['cat', '', ['dog'], []]
>>> for element in mixed:
...     if element:
...         print element
...
cat
['dog']

En d'autres termes, il n'est pas nécessaire de faire si len (élément)> 0: sous la condition.

>>> animals = ['cat', 'dog']
>>> if 'cat' in animals:
...     print 1
... elif 'dog' in animals:
...     print 2
...
1

Si elif est remplacé par if, 1 et 2 sont affichés. Par conséquent, la clause elif peut contenir plus d'informations que la clause if.

4.2 Sequences Cette séquence, appelée tuple, est formée par l'opérateur virgule et est placée entre parenthèses. En outre, vous pouvez voir la partie spécifiée en ajoutant un index de la même manière qu'une chaîne de caractères.

>>> t = 'walk', 'fem', 3
>>> t
('walk', 'fem', 3)
>>> t[0]
'walk'
>>> t[1:]
('fem', 3)
>>> len(t)
3

J'ai comparé directement des chaînes, des listes et des taples, et j'ai essayé les opérations d'indexation, de découpage et de longueur pour chaque type!

>>> raw = 'I turned off the spectroroute'
>>> text = ['I', 'turned', 'off', 'the', 'spectroroute']
>>> pair = (6, 'turned')
>>> raw[2], text[3], pair[1]
('t', 'the', 'turned')
>>> raw[-3:], text[-3:], pair[-3:]
('ute', ['off', 'the', 'spectroroute'], (6, 'turned'))
>>> len(raw), len(text), len(pair)
(29, 5, 2)

Operating on Sequence Types Différentes façons d'itérer une séquence python.png

Utilisez inverse (trié (ensemble (s))) pour trier les éléments uniques de s dans l'ordre inverse. Vous pouvez utiliser random.shuffle (s) pour randomiser le contenu de la liste avant l'itération.

FreqDist peut être converti en séquences!

>>> raw = 'Red lorry, yellow lorry, red lorry, yellow lorry.'
>>> text = word_tokenize(raw)
>>> fdist = nltk.FreqDist(text)
>>> sorted(fdist)
[',', '.', 'Red', 'lorry', 'red', 'yellow']
>>> for key in fdist:
...     print(key + ':', fdist[key], end='; ')

...
lorry: 4; red: 1; .: 1; ,: 3; Red: 1; yellow: 2

Réorganisez le contenu de la liste à l'aide de tapples !!

>>> words = ['I', 'turned', 'off', 'the', 'spectroroute']
>>> words[2], words[3], words[4] = words[3], words[4], words[2]
>>> words
['I', 'turned', 'the', 'spectroroute', 'off']

zip () prend deux ou plusieurs séquences d'éléments et les "compresse" ensemble en une seule liste de tuples! Étant donné la séquence s, enumerate (s) renvoie une paire composée de l'index et des éléments de cet index.

>>> words = ['I', 'turned', 'off', 'the', 'spectroroute']
>>> tags = ['noun', 'verb', 'prep', 'det', 'noun']
>>> zip(words, tags)
<zip object at ...>
>>> list(zip(words, tags))
[('I', 'noun'), ('turned', 'verb'), ('off', 'prep'),
('the', 'det'), ('spectroroute', 'noun')]
>>> list(enumerate(words))
[(0, 'I'), (1, 'turned'), (2, 'off'), (3, 'the'), (4, 'spectroroute')]

Combining Different Sequence Types

>>> words = 'I turned off the spectroroute'.split()  # (1)
>>> wordlens = [(len(word), word) for word in words]  # (2)
>>> wordlens.sort()  # (3)
>>> ' '.join(w for (_, w) in wordlens)  # (4)
'I off the turned spectroroute'

Une chaîne est en fait un objet dans lequel des méthodes telles que split () sont définies. Créez une liste de taples en utilisant la notation d'inclusion de liste dans (2). Chaque taple se compose d'un nombre (longueur de mot) et d'un mot (par exemple (3, «le»)). Utilisez la méthode sort () pour trier la liste (3) à la volée! Enfin, dans (4), les informations de longueur sont ignorées et les mots sont à nouveau combinés en une chaîne de caractères.

** En Python, les listes sont variables et les taples sont immuables. Autrement dit, vous pouvez changer la liste, mais pas le tapple !!! **

Generator Expressions

>>> text = '''"When I use a word," Humpty Dumpty said in rather a scornful tone,
... "it means just what I choose it to mean - neither more nor less."'''
>>> [w.lower() for w in word_tokenize(text)]
['``', 'when', 'i', 'use', 'a', 'word', ',', "''", 'humpty', 'dumpty', 'said', ...]

Je veux traiter ces mots plus loin.

>>> max([w.lower() for w in word_tokenize(text)])  # (1)
'word'
>>> max(w.lower() for w in word_tokenize(text))  # (2)
'word'

Recommended Posts

4. Création d'un programme structuré
Création d'outils de grattage
Créer un chargeur de jeu de données
Essayez de créer un problème FizzBuzz avec un programme shell
Bloquer le disque RAM de l'appareil Créer un appareil
Créer une application Web avec Flask ②
Étape par étape pour créer un Dockerfile
Créer un arbre déterminé avec scikit-learn
Créer un serveur Flask avec Docker
Créer une application Web pour la transcription vocale
Créer un tableau simple à l'aide de prettytable
Créer une application Web avec Flask ①
[Python] Mémo de création de l'outil de grattage
Précautions lors de la création d'un générateur Python
Créer un modèle d'apprentissage à l'aide de MNIST
Créer une application Web avec Flask ③
Lors de la création d'une matrice dans une liste
Créer une application Web avec Flask ④
[Python] Chapitre 03-01 graphiques de tortues (création d'une tortue)
Lors de l'écriture d'un programme en Python
L'histoire de l'exportation d'un programme
Créer un fichier power simple avec Python
[Python] Un programme qui crée des escaliers avec #
J'ai fait un programme de gestion de la paie en Python!
Comment puis-je écrire un bon programme?
Création d'un bot LINE ~ Création, déploiement et lancement ~
Commandes pour créer un nouveau projet django
Ecrire un programme de chiffrement Caesar en Python
Créer un écran de connexion dans Django all auth
Remarques sur la création d'outils de mise en forme de texte
Création d'une application d'analyse de données à l'aide de Streamlit
[Python] Création d'un graphique de tirage des actions
Créer un script shell pour écrire un journal
Un programme qui utilise Python pour lire des fichiers indésirables
Mémo sur Sphinx Partie 1 (Création d'un projet)
Créer une carte du choléra pour John Snow
Créer un environnement virtuel dans un environnement Anaconda
Créer un environnement de développement pour l'apprentissage automatique
[Python] Un programme qui arrondit le score