[PYTHON] 4. Erstellen eines strukturierten Programms

4.1 Back to the Basics Assignment

Zuweisung ist eines der wichtigsten Konzepte in einem Programm. Aber es gibt einige erstaunliche Dinge! !!

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

Wenn Sie im obigen Code bar = foo schreiben, wird der Wert von foo (Zeichenfolge 'Monty') in (1) bar zugewiesen. Mit anderen Worten, bar ist eine Kopie von foo, sodass das Überschreiben von foo mit der neuen Zeichenfolge 'Python'on line (2) den Wert von bar nicht beeinflusst.

Die Zuweisung kopiert den Wert eines Ausdrucks, aber der Wert entspricht nicht immer Ihren Erwartungen! !! !! Insbesondere die Werte strukturierter Objekte wie Listen sind eigentlich nur Verweise auf die Objekte! Im folgenden Beispiel weist (1) der Variablenleiste einen Verweis auf foo zu. Wenn Sie das Innere von foo in der nächsten Zeile ändern, wird auch der Wert von bar geändert

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

list-memory

bar = foo kopiert nicht den Inhalt der Variablen, sondern nur deren ** Objektreferenz **! !! Dies ist eine Referenz auf das Objekt, das an Position 3133 in foo gespeichert ist. Wenn Sie bar = foo zuweisen, wird nur die Objektreferenz 3133 kopiert, sodass durch das Aktualisieren von foo auch der Balken geändert wird!

Erstellen wir eine leere Variable, die eine leere Liste enthält, und verwenden Sie sie dreimal in der nächsten Zeile für weitere Experimente.

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

Als ich eines der Elemente in der Liste geändert habe, haben sich alle geändert! !! ?? ?? Sie können sehen, dass jedes der drei Elemente tatsächlich nur ein Verweis auf ein und dieselbe Liste im Speicher ist! !!

Beachten Sie, dass wenn Sie einem der Elemente in der Liste einen neuen Wert zuweisen, dieser nicht in den anderen Elementen wiedergegeben wird!

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

In der dritten Zeile wurde eine der drei Objektreferenzen in der Liste geändert. Das 'Python'-Objekt hat sich jedoch nicht geändert. Dies liegt daran, dass Sie das Objekt über die Objektreferenz ändern und die Objektreferenz nicht überschreiben!

Equality Python bietet zwei Möglichkeiten, um sicherzustellen, dass das Elementpaar identisch ist. ist Testen Sie den Bediener auf Objektidentifikation. Dies kann verwendet werden, um frühere Beobachtungen über das Objekt zu validieren.

>>> 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

Erstellen Sie eine Liste mit mehreren Kopien desselben Objekts und zeigen Sie, dass diese nicht nur gemäß == identisch sind, sondern auch ein und dasselbe Objekt.

>>> 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

Die Funktion id () erleichtert das Erkennen!

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

Dies sagt uns, dass das zweite Element in der Liste eine separate Kennung enthält!

Conditionals Im bedingten Teil der if-Anweisung wird eine nicht leere Zeichenfolge oder Liste als wahr und eine leere Zeichenfolge oder Liste als falsch ausgewertet.

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

Mit anderen Worten, es ist nicht erforderlich, wenn len (Element)> 0: unter der Bedingung ist.

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

Wenn elif durch if ersetzt wird, werden sowohl 1 als auch 2 ausgegeben. Daher enthält die elif-Klausel möglicherweise mehr Informationen als die if-Klausel.

4.2 Sequences Diese als Tupel bezeichnete Sequenz wird vom Kommaoperator gebildet und in Klammern eingeschlossen. Sie können den angegebenen Teil auch anzeigen, indem Sie einen Index wie eine Zeichenfolge hinzufügen.

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

Ich habe Strings, Listen und Taples direkt verglichen und versucht, Indizierungs-, Slicing- und Längenoperationen für jeden Typ durchzuführen!

>>> 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 Verschiedene Möglichkeiten, eine Sequenz zu iterieren python.png

Verwenden Sie reverse (sortiert (set (s))), um die eindeutigen Elemente von s in umgekehrter Reihenfolge zu sortieren. Sie können random.shuffle (s) verwenden, um den Inhalt der Liste s vor dem Iterieren zufällig zu sortieren.

FreqDist kann in Sequenzen umgewandelt werden!

>>> 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

Ordne den Inhalt der Liste mit Hilfe von Tapples neu an !!

>>> 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 () nimmt zwei oder mehr Sequenzen von Elementen und "komprimiert" sie zu einer einzigen Liste von Tupeln! In Anbetracht der Sequenz s gibt enumerate (s) ein Paar zurück, das aus dem Index und den Elementen an diesem Index besteht.

>>> 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'

Ein String ist eigentlich ein Objekt, in dem Methoden wie split () definiert sind. Erstellen Sie eine Liste von Taples mit der Listeneinschlussnotation in (2). Jeder Taple besteht aus einer Zahl (Wortlänge) und einem Wort (z. B. (3, 'the')). Verwenden Sie die sort () -Methode, um die (3) -Liste im laufenden Betrieb zu sortieren! Schließlich werden in (4) die Längeninformationen verworfen und die Wörter wieder zu einer Zeichenkette zusammengefasst.

** In Python sind Listen variabel und Taples unveränderlich. Das heißt, Sie können die Liste ändern, aber nicht den 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', ...]

Ich möchte diese Worte weiter verarbeiten.

>>> 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. Erstellen eines strukturierten Programms
Erstellung von Schabewerkzeugen
Erstellen eines Dataset Loader
Versuchen Sie, ein FizzBuzz-Problem mit einem Shell-Programm zu erstellen
Geräte-RAM-Disk blockieren Gerät erstellen
Erstellen einer Webanwendung mit Flask ②
Schritt für Schritt zum Erstellen einer Docker-Datei
Erstellen eines bestimmten Baums mit Scikit-Learn
Erstellen eines Flask-Servers mit Docker
Erstellen einer Web-App für die Sprachtranskription
Erstellen einer einfachen Tabelle mit Stettytable
Erstellen einer Webanwendung mit Flask ①
[Python] Memo zum Erstellen von Scraping-Tools
Vorsichtsmaßnahmen beim Erstellen eines Python-Generators
Erstellen eines Lernmodells mit MNIST
Erstellen einer Webanwendung mit Flask ③
Beim Erstellen einer Matrix in einer Liste
Erstellen einer Webanwendung mit Flask ④
[Python] Kapitel 03-01 Schildkrötengrafiken (Erstellen einer Schildkröte)
Beim Schreiben eines Programms in Python
Die Geschichte des Exportierens eines Programms
Erstellen einer einfachen Power-Datei mit Python
[Python] Ein Programm, das Treppen mit # erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Wie kann ich ein gutes Programm schreiben?
Erstellen eines LINE-Bots ~ Erstellen, Bereitstellen und Starten von ~
Befehle zum Erstellen eines neuen Django-Projekts
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Erstellen eines Anmeldebildschirms in Django all auth
Hinweise zum Erstellen von Textformatierungswerkzeugen
Erstellen einer Datenanalyseanwendung mit Streamlit
[Python] Erstellen eines Aktien-Drawdown-Diagramms
Erstellen eines Shell-Skripts zum Schreiben eines Tagebuchs
Ein Programm, das Python zum Abspielen von Junk verwendet
Memo über Sphinx Teil 1 (Erstellen eines Projekts)
Erstellen einer Cholera-Karte für John Snow
Erstellen einer virtuellen Umgebung in einer Anaconda-Umgebung
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
[Python] Ein Programm, das die Partitur rundet