Ich weiß nicht, welche Zahl ich brauen soll, aber es ist wichtig, sie selbst zu erleben und in eigenen Worten zu schreiben.
Wenn Sie eine Zeichenfolge normal definieren, kann sie wie ein eindimensionales Array behandelt werden, in dem jedes Zeichen gespeichert ist.
python
letters="ABCDEFG"
#Was ist der dritte (ab 0)?
letters[3] # 'D'
Sie können auch Minus verwenden, um von hinten zu zählen. Wenn es in normaler Reihenfolge ist, zählt es von 0, aber wenn es von hinten ist, ist es am Ende -1. Nicht -0. Natürlich?
python
#Was ist der zweite von hinten?
letters[-2] # 'F'
Es ist auch möglich, Zeichenfolgen Zeichen für Zeichen als eindimensionales Array zu extrahieren.
Quelle
for letter in letters:
print (letter)
Ergebnis
A
B
C
D
E
F
G
Es ist nicht der Zweck dieser Zeit, aber es ist bequem, sich an die Aufzählungsfunktion zu erinnern. Sie können den Index und das Element gleichzeitig abrufen. Es ist nicht schwierig, das gleiche Ergebnis zu erzielen, ohne dies zu verwenden. Es ist eine Frage der Lesbarkeit. Oder sie erwägen eine Portierung in andere Sprachen, die diese Funktion nicht haben. Ich stimme der Meinung voll und ganz zu, dass es unangenehm ist, Werte für mehrere Variablen gleichzeitig zu erhalten, aber Sie sollten sich daran gewöhnen.
Quelle mit der Aufzählungsfunktion
for i,letter in enumerate(letters):
print (i,letter)
Quelle, die die Aufzählungsfunktion nicht verwendet
for i in range(len(letters)):
print (i,letters[i])
Das Ergebnis ist das gleiche
0 A
1 B
2 C
3 D
4 E
5 F
6 G
Die Showa-duftende Petit Con hat auch eine versteckte Indexspezifikation für Zeichenketten, die im Handbuch nicht angegeben ist (es gibt keine Aufzählungsfunktion). Das folgende Bild ist zusammengesetzt, und 3DS Petitcon Nr. 3 kann nicht auf dem unteren Bildschirm ausgeführt werden, während die Liste auf dem oberen Bildschirm angezeigt wird. Es kümmert mich nicht.
Möglicherweise liegt es an der Spezifikation, dass eine Zeichenfolge auch als eindimensionales Array verwendet werden kann, wodurch es so einfach ist zu überprüfen, ob eine bestimmte Zeichenfolge eine bestimmte Zeichenfolge enthält.
Quelle
if "CD" in "ABCDEFG": #Ich habe es sichtbar gemacht, weil es schwierig ist zu verstehen, was ich mit Variablen mache
print ("Wird mit inbegriffen sein")
else:
print ("Nicht enthalten")
Ergebnis
Wird mit inbegriffen sein
Slice ist ein Trick, der einen Teil der Sequenz herausnehmen kann. Ausgedrückt als [Start: Ende: Schritt]. Wenn Start weggelassen wird, ist es von Anfang an, wenn Ende weggelassen wird, ist es bis zum Ende, und wenn Schritt weggelassen wird, ist Schritt = 1. Wie der Index zählt er ab 0 und enthält nicht den für end angegebenen Wert.
python
#Zur leichteren Bestätigung neu definiert
letters="ABCDEFG"
#Geben Sie Start und Ende an und lassen Sie den Schritt weg
letters[3:5] # 'DE'
Es erscheint unpraktisch, dass der durch end angegebene Index nicht tatsächlich enthalten ist, aber er hat auch einen Vorteil.
python
#Zur leichteren Bestätigung neu definiert
letters="ABCDEFG"
#Geben Sie nur end = sogenannte linke Funktion an
letters[:4] # 'ABCD'
#Geben Sie nur start = von der angegebenen Position bis zum Ende an
letters[4:] # 'EFG'
Auf diese Weise können Sie das Array teilen, indem Sie einen Index angeben.
Gewöhnen wir uns an die negative Behandlung.
python
#Zur leichteren Bestätigung neu definiert
letters="ABCDEFG"
#3. Zeichen von hinten (angegeben durch Index anstelle von Slice, bereits erwähnt)
print(letters[-3]) # 'E'
#Geben Sie nur start = sogenannte rechte Funktion vom "dritten Zeichen von hinten" bis zum Ende an
print(letters[-3:]) # 'EFG'
#Geben Sie nur end = von Anfang bis "drittes Zeichen von hinten" an.
print(letters[:-3]) # 'ABCD'
#Es wird seltener verwendet, aber natürlich können beide negativ sein. Achten Sie auf das Größenverhältnis.
print(letters[-5:-3]) # 'CD'
Sie können auch Ihre eigene Mittelfunktion mithilfe von Slices erstellen. Es ist möglicherweise nicht erforderlich, eine Funktion daraus zu machen, aber wir erstellen auch eine linke und eine rechte Funktion. Der Grund, warum 0 als Standardwert für die Länge angegeben wird, ist die Ausgabe "von der angegebenen Position bis zum Ende", wenn die Länge weggelassen wird. -1 dient zum Zählen des ersten Zeichens als erstes Zeichen anstelle des 0. Zeichens. In Excel war das Verhalten übrigens zwischen der Arbeitsblattfunktion MID und der VBA Mid-Funktion unterschiedlich.
python
def left(text, length):
return text[:length]
def right(text, length):
return text[-length:]
def mid(text, pos, length=0):
if not length:
length=len(text)
return text[pos-1:pos+length-1]
Wenn Schritt angegeben ist, wird es so. Holen Sie es sich zuerst normal in Schritt 2.
python
#Zur leichteren Bestätigung neu definiert
letters="ABCDEFG"
letters[1:5:2] # 'BD'
#Dies ist ein solcher Mechanismus.
# ABCDEFG
# 0123456
# ◯ ◯ ×
#2. Argument=Da es 5 ist, ist das 5. Zeichen nicht enthalten
Wenn Sie für Schritt ein Minus angeben, wird in die entgegengesetzte Richtung verfahren. Da es in die entgegengesetzte Richtung geht, muss das Ende kleiner und der Anfang größer sein.
python
letters[5:1:-2] # 'FD'
Ich dachte, dass der Schritt negativ ist, ist keine so unregelmäßige Verwendung, aber ** Start und Ende sind alle angegeben und der Schritt ist auf -1 gesetzt, dh wenn :: -1 gesetzt ist, sind alle Elemente in umgekehrter Reihenfolge ** Es ist gut, sich an diese Bewegung zu erinnern, da sie häufig verwendet wird. Für das, was es verwendet, hat das von imread von OpenCV gelesene Bild die in BGR gespeicherte Farbe, kann jedoch bei der Konvertierung in RGB verwendet werden. OpenCV hat auch eine Farbkonvertierungsfunktion, aber diese ist intelligenter.
Quelle
print (letters)
print (letters[::-1])
Ergebnis
ABCDEFG
GFEDCBA
Ich wollte wirklich von hier aus reden. Erstellen Sie zunächst ein zweidimensionales Array. Ich stieß plötzlich auf die Geschichte von ** letztes Mal **.
Quelle
#versprechen
import numpy as np
#Höhe und Breite
H,W = 5,6
#Erstellen Sie zunächst ein leeres Array mit nur der definierten Größe
arr=np.full((H,W),"",dtype=object)
#Definieren Sie Werte wie Excel-Zellennamen
letters="ABCDEFG"
for c in range(W):
for r in range(H):
arr[r,c]=letters[c]+str(r)
print (arr)
Ergebnis
[['A0' 'B0' 'C0' 'D0' 'E0' 'F0']
['A1' 'B1' 'C1' 'D1' 'E1' 'F1']
['A2' 'B2' 'C2' 'D2' 'E2' 'F2']
['A3' 'B3' 'C3' 'D3' 'E3' 'F3']
['A4' 'B4' 'C4' 'D4' 'E4' 'F4']]
Wenn Sie es normalerweise nach Index angeben, sieht es so aus. Ich schreibe es oft, aber die Zählung beginnt bei 0.
python
r,c=2,1
arr[r,c] # 'B2'
Wenn Sie Slices für Zeilen und Spalten angeben, sieht dies folgendermaßen aus. Da die Grundvoraussetzung [Start: Ende] ist, können Sie [r1: r2, c1: c2] als Koordinatentick verwenden. Es ist jedoch besser, sich daran zu erinnern, indem Sie ** [r: r + h, c: c + w] ** schreiben. Überlegen.
Quelle
r,c = 2,1 #Zeile und Spalte starten
h,w = 3,4 #Bereich Höhe und Breite
print(arr[r:r+h, c:c+w])
Ergebnis
[['B2' 'C2' 'D2' 'E2']
['B3' 'C3' 'D3' 'E3']
['B4' 'C4' 'D4' 'E4']]
Das Array mit der angegebenen Anzahl von Zeilen und Spalten wurde erfolgreich abgerufen.
** Indizierung gibt ein Element zurück **, ** Slices geben jedoch einen Teil des Arrays zurück **. Auch wenn es 1 Zeile und 1 Spalte ist.
Quelle
r,c = 2,1 #Zeile und Spalte starten
h,w = 1,1 #Bereich Höhe und Breite
print ("Index",arr[r, c])
print ("Scheibe",arr[r:r+h, c:c+w])
python
Index B2
Scheibe[['B2']]
Das scheint jedoch keine Saite zu sein.
Quelle
#Zur leichteren Bestätigung neu definiert
letters="ABCDEFG"
print ("Index",letters[3])
print ("Scheibe",letters[3:3+1])
Ergebnis
Index D.
Geschnitten
Wenn Sie eine der zweidimensionalen Array-Matrizen als Index und die andere als Slice angeben, erhalten Sie ein eindimensionales Array. Es ist ein eindimensionales Array oder nur eine Aufzählung oder Liste.
Quelle
r=3
print (arr[r,:]) #Alle Spalten sind angegeben
c=4
print (arr[:,c]) #Alle Zeilen sind angegeben
Ergebnis
['A3' 'B3' 'C3' 'D3' 'E3' 'F3']
['E0' 'E1' 'E2' 'E3' 'E4']
Ich habe das Ergebnis des Aufschneidens von 1 Zeile 1 Spalte oben geschrieben, aber ich möchte Ihnen ein praktischeres Beispiel geben. Wenn eine Zeile des zweidimensionalen Arrays durch Schneiden angegeben wird und die Spalte ebenfalls geschnitten wird, ist dies wie folgt. Die Halterung ist verdoppelt. Es ist ein zweidimensionales Array mit 1 Zeile und w Spalten.
Quelle
r=3
print (arr[r:r+1,:])
Ergebnis
[['A3' 'B3' 'C3' 'D3' 'E3' 'F3']]
Wenn Sie die Zeile als Slice und eine Spalte als Slice angeben, wird sie zu einem zweidimensionalen Array mit h Zeilen und 1 Spalte.
Quelle
c=4
print (arr[:,c:c+1])
Ergebnis
[['E0']
['E1']
['E2']
['E3']
['E4']]
Es wird nur ein Beispiel für das Umdrehen mit :: -1 anstelle der normalen Schrittverwendung angezeigt.
Quelle
print("Ursprüngliche Form")
print(arr)
print("Erstes Argument = Zeile umkehren")
print(arr[::-1])
print("Zweites Argument = Spalte umkehren Das erste Argument ist alle angegeben.::Aber okay:Aber es ist gut")
print(arr[::, ::-1])
print("Invertieren Sie sowohl Zeilen als auch Spalten")
print(arr[::-1, ::-1])
Ergebnis
Ursprüngliche Form
[['A0' 'B0' 'C0' 'D0' 'E0' 'F0']
['A1' 'B1' 'C1' 'D1' 'E1' 'F1']
['A2' 'B2' 'C2' 'D2' 'E2' 'F2']
['A3' 'B3' 'C3' 'D3' 'E3' 'F3']
['A4' 'B4' 'C4' 'D4' 'E4' 'F4']]
Erstes Argument = Zeile umkehren
[['A4' 'B4' 'C4' 'D4' 'E4' 'F4']
['A3' 'B3' 'C3' 'D3' 'E3' 'F3']
['A2' 'B2' 'C2' 'D2' 'E2' 'F2']
['A1' 'B1' 'C1' 'D1' 'E1' 'F1']
['A0' 'B0' 'C0' 'D0' 'E0' 'F0']]
Zweites Argument = Spalte umkehren Das erste Argument ist alle angegeben.::Aber okay:Aber es ist gut
[['F0' 'E0' 'D0' 'C0' 'B0' 'A0']
['F1' 'E1' 'D1' 'C1' 'B1' 'A1']
['F2' 'E2' 'D2' 'C2' 'B2' 'A2']
['F3' 'E3' 'D3' 'C3' 'B3' 'A3']
['F4' 'E4' 'D4' 'C4' 'B4' 'A4']]
Invertieren Sie sowohl Zeilen als auch Spalten
[['F4' 'E4' 'D4' 'C4' 'B4' 'A4']
['F3' 'E3' 'D3' 'C3' 'B3' 'A3']
['F2' 'E2' 'D2' 'C2' 'B2' 'A2']
['F1' 'E1' 'D1' 'C1' 'B1' 'A1']
['F0' 'E0' 'D0' 'C0' 'B0' 'A0']]
Ich kann mich nicht an so etwas erinnern, wenn ich es nicht selbst versuche.
Ich wollte von hier aus das OpenCV-Image eingeben, war aber erschöpft. Nächstes Mal werde ich über Bilder sprechen.
Recommended Posts