List Comprehension Nachklapp

List Comprehension Nachklapp#

Nachklap zum Thema List Comprehension.

from timeit import default_timer as timer
result = [] # da sammeln wir unsere Ergebnisse hinein

start = timer()
for aussen in range(1000):
    for innen in range(20):
        if aussen in [1, 2]:
            if innen % 5 == 0:
                result.append(aussen*innen)
end = timer()
print(end - start)

print(result)
0.0009753330086823553
[0, 5, 10, 15, 0, 10, 20, 30]
start = timer()
[  aussen*innen for aussen in range(1000) for innen in range(20) if aussen in [1,2] if innen % 5 == 0]
end = timer()
print(end - start)

print(result)
0.0005228800000622869
[0, 5, 10, 15, 0, 10, 20, 30]
result = []
for aussen in range(1000):
    for innen in range(20):
        if aussen in [1,2]:
            if innen % 5 == 0:
                result.append(aussen*innen)
result
[0, 5, 10, 15, 0, 10, 20, 30]

dict comprehensions#

Wir benötigen ein dict von Quadratzahlen. Wir erzeugen eines, indem wir durch einen Range durchlaufen.

quadrate = { x: x**2  for x in range(10)  }
quadrate
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Ab jetzt interessiert uns dieses dict.

# alle keys, indem wir durch ein dict durchlaufen
q = { x for x  in quadrate }
q, type(q)
({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, set)
# das gleiche: nochmal alle keys, indem wir durch ein dict durchlaufen
q = { x for x  in quadrate.keys() }
q, type(q)
({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, set)
# alle Values, indem wir durch ein dict durchlaufen
q = { x for x  in quadrate.values() }
q, type(q)
({0, 1, 4, 9, 16, 25, 36, 49, 64, 81}, set)
# alle key-value-Tupel, indem wir durch ein dict durchlaufen
q = { x for x  in quadrate.items() }
print(q, type(q))
{(7, 49), (2, 4), (4, 16), (0, 0), (1, 1), (8, 64), (6, 36), (3, 9), (5, 25), (9, 81)} <class 'set'>
# alle key-value-Tupel, indem wir durch ein dict durchlaufen
q = { (x,y) for (x,y)  in quadrate.items() }
print(q, type(q))
{(7, 49), (2, 4), (4, 16), (0, 0), (1, 1), (8, 64), (6, 36), (3, 9), (5, 25), (9, 81)} <class 'set'>
# alle key-value-Tupel, indem wir durch ein dict durchlaufen
q = { (x,y) for x,y in quadrate.items() }
print(q, type(q))
{(7, 49), (2, 4), (4, 16), (0, 0), (1, 1), (8, 64), (6, 36), (3, 9), (5, 25), (9, 81)} <class 'set'>
# das geht nicht
# q = { x,y for x,y in quadrate.items() }
# print(q, type(q))
# alle key-value-Tupel, indem wir durch ein dict durchlaufen
q = { x: y for x,y in quadrate.items() }
print(q, type(q))
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} <class 'dict'>
# alle key-value-Tupel, indem wir durch ein dict durchlaufen
q = { 2*x: 4*y for x,y in quadrate.items() }
print(q, type(q))
{0: 0, 2: 4, 4: 16, 6: 36, 8: 64, 10: 100, 12: 144, 14: 196, 16: 256, 18: 324} <class 'dict'>

Sternchen#

def volumen_1(l, b, h, koerper):
    if koerper == "quader":
        return l * b * h
    elif koerper == "pyramide":
        return l * b * h / 3
    else:
        print(f"{koerper=} ist unbekannt")
volumen_1(10,10,10,"quader")
1000
anderes_ding = [10,10,10,"pyramide"]
volumen_1(*anderes_ding)
333.3333333333333
def volumen_2(*, l, b, h, koerper):
    if koerper == "quader":
        return l * b * h
    elif koerper == "pyramide":
        return l * b * h / 3
# das geht nicht
# volumen_2(10,10,10,"quader")
volumen_2(koerper="quader", l=10, b=10, h=10)
1000
ding = { "koerper": "quader", "l":10, "b": 10, "h":10 }
# umständlich
volumen_2(koerper = ding["koerper"], l = ding["l"],  h = ding["h"], b = ding["b"])
1000
volumen_2(**ding)
1000
def volumen_3(l, b, h, *, koerper="quader"):
    if koerper == "quader":
        return l * b * h
    elif koerper == "pyramide":
        return l * b * h / 3
volumen_3(10,10,10, koerper="quader")
1000
volumen_3(10,10,10)
1000
volumen_3(10,10,10, koerper="pyramide")
333.3333333333333

Spielen!#

am Beispiel von unterschiedlichen Arten, durch einen String durchzulaufen

gegeben: ein String, z.B. s = "Hallo!"

gesucht: mit wie vielen unterschiedlichen Arten kann man durch einen String Buchstabe für Buchstabe durchlaufen?

s = "Hallo!"
for x in list(s):
    print(x, end="_")
H_a_l_l_o_!_
for x in s:
    print(x, end="_")
H_a_l_l_o_!_
for x in range(len(s)):
    print(s[x], end="_")
H_a_l_l_o_!_
for x in range(len(s)):
    new_s = s[x:x+1]
    print(new_s, end="_")
H_a_l_l_o_!_
for x in s:
    print(f"{x}", end="_")
H_a_l_l_o_!_
for x in s:
    print(f"{x}_", end="")
H_a_l_l_o_!_