Python Datentypen
Contents
Python Datentypen¶
Python kann ein wenig seltsam sein, da es viele Datentypen, dynamische Typzuweisung und einige Automatishe Konvertierungen bietet.
Zahlen¶
Ganzzahlen, Fließkommazahlen und komplexe Zahlen sind automatisch verfügbar.
f = 1.0
i = 1
c = 0.0 + 1.0j
print(f, i, c)
print("Value of f is {}, value of i is {}, the value of c is {}".format(f, i, c))
print("Value of f is {:f}, value of i is {:f}, value of c**2 is {:f}".format(f, i, c**2))
Note
The math
module needs to be imported before you can use it.
import math
math.sqrt(f) # 1.0
math.sqrt(c) # can't convert complex to float
math.sqrt(-1) # math domain error
Zahlen als Objekte¶
Praktisch alles in Python ist ein Objekt. Das bedeutet, dass es ein Ding ist, das mehrere Kopien haben kann und das weiss, wie man bestimmte Operationen mit sich selbst ausführt.
Zum Beispiel kennt eine Fliesskommazahl bestimmte Dinge, die sie tun kann, als einfach nur eine Zahl zu sein:
f
help(f)
f.is_integer() # True
i.imag # 0
f.__truediv__(2.0) # 0.5
Strings¶
string_1 = "Hello"
string_1[0] # H
string_1[-1] # o
string_1[1:] # ello
string_1[:-2] # Hel
string_1[3:3] # ''
len(string_1) # 5
string_1 + ' World' # Hello World
string_2 = "heLLo w0rlD"
string_2.replace("0", o) # heLLo world
string_2.lower() # hello w0rld
string_2.capitalize() # HeLLo W0rld
string_3 = string_2.lower().capitalize().replace("0", "o") # Hello world
# Hello world
# 012345678910
string_3[6:] + " " + string_3[0:5] # World Hello
Eines der Probleme mit Strings als Datenstrukturen ist jedoch, dass sie unveränderlich sind. Um etwas zu ändern, müssen wir Kopien der Daten erstellen
string_3[1] = 'a' # creates exception
Datastructure¶
tuples
¶
tuples
sind Bündel von Daten in strukturierter Form, und sie sind unveränderlich. Sie werden mit Klammern definiert ()
.
tuple_1 = (1.0, 2.0, 0.0)
tuple_2 = (3.0, 2.0, 4.0)
tuple_1[1] # 2.0
tuple_1 + tuple_2 # (1.0, 2.0, 0.0, 3.0, 2.0, 4.0)
2*tuple_1 # (1.0, 2.0, 0.0, 1.0, 2.0, 0.0)
Gewisse Operationen können bei tuples
nicht angewendet werden
tuple_1-tuple_2
tuple_1*tuple_2
tuple_1[1] = 2
lists
¶
Listen” sind flexibler als tuples
, ihnen können Elemente zugewiesen oder entfernt werden. Es sind also veränderliche tuples
. Sie werden mit Eckigen Klammern definiert []
. Sie können auch inneinander verschachtelt werden und die beinhalteten Datentypen können gemischt werden.
list_1 = [1.0, 2.0, 3.0]
list_2 = ['a', 'b', 'c']
list_3 = [1.0, 'a', (1, 2, 3), ['f', 'g', 'h']]
list_1[2] # 3.0
list_2[-1] # 'c'
list_3[3] # ['f', 'g', 'h']
list_3[3][0] # 'f'
2*list_1 # [1.0, 2.0, 3.0, 1.0, 2.0, 3.0]
list_+[0] = 0.0 #
list_1 # [0.0, 2.0, 3.0]
list_1.append(4.0) # [0.0, 2.0, 3.0, 4.0]
list_2 += 'b' # ['a', 'b', 'c', 'b']
list_2.remove('b') # ['a', 'c', 'b']
Gewisse Operationen können bei lists
nicht angewendet werden
2.0*list_1
sets
¶
sets
sind spezielle listenähnliche Sammlungen von eindeutigen Elementen. Beachten Sie, dass die Elemente nicht geordnet sind (es gibt kein “s[1]”).
set_1 = set([6, 5, 4, 2, 1, 1, 1, 1])
set_1 # {1, 2, 4, 5, 6}
set_1.add(7) # {1, 2, 4, 5, 6, 7}
set_1.add(3) # {1, 2, 3, 4, 5, 6, 7}
set_1.add(1) # {1, 2, 3, 4, 5, 6, 7}
set_2 = set([5, 6, 7, 8, 9, 10, 11])
set_1.intersection(set_2) # {5, 6, 7}
set_1.union(set_2) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
Dictionaries¶
Dies sind sehr nützliche Datensammlungen, in denen die Informationen anhand des Namens statt eines numerischen Indexes nachgeschlagen werden können. Dies ist als leichtgewichtige Datenbank sehr nützlich und wird häufig benötigt, wenn Module zum Einlesen von Daten verwendet werden.
dict_1 = { "item1": ['a', 'b', 'c'], "item2": ['c', 'd', 'e']}
dict_2 = {"Small Number":1.0, "Tiny Number":0.00000001, "Big Number": 100000000.0}
dict_1["item1"] # ['a', 'b', 'c']
dict_1["item1"][1] # 'b'
dict_2["Small Number"] + dict_2["Tiny Number"] # 1.00000001
dict_2["Small Number"] + dict_2["Big Number"] # 100000001.0
dict_2.keys() # dict_keys(['Small Number', 'Tiny Number', 'Big Number'])
for k in dict_2.keys():
print("{:>15s}".format(k), " --> ", dict_2[k])
# Small Number --> 1.0
# Tiny Number --> 1e-08
# Big Number --> 100000000.0
Noch nützlicher ist die Tatsache, dass das Wörterbuch als Schlüssel alles haben kann, was mit der Funktion hash
in eine eindeutige Zahl umgewandelt werden kann. Zeichenketten sinc pratkisch als Schlüssel, aber alles, was unveränderlich ist, kann gehasht werden:
Aufgabe: Erstellen einer Reverse-Lookup-Tabelle¶
Angenommen, Sie haben ein Wörterbuch mit Telefonnummern:
phone_book = {"Rick Sanchez": ("027", "374 92 97"),
"Morty Smith": ("079", "566 14 57"),
"Richard Feynman": ("012", "345 67 89")
}
Können Sie ein umgekehrtes Telefonbuch erstellen, um herauszufinden, wer von ihrer Telefonnummer aus anruft?
Lösung: Hier ist eine mögliche Lösung für die einfache Version des Problems, aber diese könnte noch eine Fehlerprüfung beinhalten (wenn man eine falsche Zahl eingibt)
reverse_phone_book = {}
for key in phone_book.keys():
reverse_phone_book[phone_book[key]] = key
reverse_phone_book
# {('027', '374 92 97'): 'Rick Sanchez',
# ('079', '566 14 57'): 'Morty Smith',
# ('012', '345 67 89'): 'Richard Feynman'}