Datenstrukturen

List

Leere Liste

[1]:
l = []
[2]:
l.append(42)
l
[2]:
[42]
[3]:
l2 = ['hallo', 'schatzi']
l.extend(l2)
l
[3]:
[42, 'hallo', 'schatzi']
[4]:
l[1]
[4]:
'hallo'

Suchen: lineare Zeitkomplexität

[5]:
l
[5]:
[42, 'hallo', 'schatzi']
[6]:
len(l)
[6]:
3

1 Vergleich:

[7]:
42 in l
[7]:
True

3 Vergleiche

[8]:
'schatzi' in l
[8]:
True

Iteration

[9]:
l
[9]:
[42, 'hallo', 'schatzi']
[10]:
len(l)
[10]:
3
[11]:
i = 0
while i < len(l):
    print(l[i])
    i += 1
42
hallo
schatzi

Das geht besser: for (JavaScript: foreach)

[12]:
for element in l:
    print(element)
42
hallo
schatzi

Dictionary

“Assoziatives Array”, oder kurz: key/value mapping

[13]:
color_translations = {
    'rot': 'red',
    'blau': 'blue',
    'gelb': 'yellow'
}
[14]:
len(color_translations)
[14]:
3

Suche: Konstante Zeitkomplexität (als Hashtable)

[15]:
'rot' in color_translations
[15]:
True
[16]:
color_translations['rot']
[16]:
'red'
[17]:
color_translations['schwarz'] = 'black'
[18]:
color_translations
[18]:
{'rot': 'red', 'blau': 'blue', 'gelb': 'yellow', 'schwarz': 'black'}
[19]:
del color_translations['rot']
color_translations
[19]:
{'blau': 'blue', 'gelb': 'yellow', 'schwarz': 'black'}

Iteration

[20]:
color_translations
[20]:
{'blau': 'blue', 'gelb': 'yellow', 'schwarz': 'black'}

Iteration über Keys …

[21]:
for element in color_translations:
    print(element)
blau
gelb
schwarz
[22]:
for element in color_translations.keys():
    print(element)
blau
gelb
schwarz

Iteration über Values …

[23]:
for element in color_translations.values():
    print(element)
blue
yellow
black

Iteration über beides …

[24]:
for entry in color_translations.items():
    print('----')
    print('der ganze entry:', entry)
    print('key auf deutsch:', entry[0])
    print('value auf englisch:', entry[1])
----
der ganze entry: ('blau', 'blue')
key auf deutsch: blau
value auf englisch: blue
----
der ganze entry: ('gelb', 'yellow')
key auf deutsch: gelb
value auf englisch: yellow
----
der ganze entry: ('schwarz', 'black')
key auf deutsch: schwarz
value auf englisch: black

Same, mit Tuple Unpacking

[25]:
for deutsch, englisch in color_translations.items():
    print('----')
    print('key auf deutsch:', deutsch)
    print('value auf englisch:', englisch)
----
key auf deutsch: blau
value auf englisch: blue
----
key auf deutsch: gelb
value auf englisch: yellow
----
key auf deutsch: schwarz
value auf englisch: black
[ ]:

Set

Sack von Elementen (auch als Hashtable implementiert-> schnelle Suche)

[26]:
my_colors = {'rot', 'blau', 'schwarz', 'gelb'}
type(my_colors)
[26]:
set
[27]:
her_colors = {'pink', 'blau', 'schwarz', 'grün', 'beige'}
[28]:
'rot' in my_colors
[28]:
True

Union (Vereiningungsmenge)

[29]:
my_colors | her_colors
[29]:
{'beige', 'blau', 'gelb', 'grün', 'pink', 'rot', 'schwarz'}

Schnittmenge

[30]:
my_colors & her_colors
[30]:
{'blau', 'schwarz'}

Symmetrische Differenzmenge

[31]:
my_colors ^ her_colors
[31]:
{'beige', 'gelb', 'grün', 'pink', 'rot'}

User Datenbank: Showcase Full Stack Development

5: Response kommt von der DB

Der Request an die DB sei gewesen: select * from userdb;

[32]:
# Man denke sich, das waere PHP:
response = [
    ['1037190666', 'Jörg', 'Faschingbauer'],
    ['6666010185', 'Oliver', 'Schwarzbauer'],
]

6: Aufgabe: Formulieren eines JSON Strings, damit man diese Daten über die HTTP Verbindung zum Client/Browser schicken kann.

[33]:
# Man denke sich wieder, dass das in PHP waere
import json
json_string_fuer_den_browser = json.dumps(response)
[34]:
# anders: JSON als dictionary
response_dict = {}
for svnr, vorname, nachname in response:
    response_dict[svnr] = { 'vorname': vorname, 'nachname': nachname, 'svnr': svnr }
[35]:
response_dict
[35]:
{'1037190666': {'vorname': 'Jörg',
  'nachname': 'Faschingbauer',
  'svnr': '1037190666'},
 '6666010185': {'vorname': 'Oliver',
  'nachname': 'Schwarzbauer',
  'svnr': '6666010185'}}
[36]:
import pprint
pprint.pprint(response_dict)
{'1037190666': {'nachname': 'Faschingbauer',
                'svnr': '1037190666',
                'vorname': 'Jörg'},
 '6666010185': {'nachname': 'Schwarzbauer',
                'svnr': '6666010185',
                'vorname': 'Oliver'}}

Formatieren wir endlich in JSON …

[37]:
import json
transfer_string_in_php_am_server = json.dumps(response_dict)
[38]:
transfer_string_in_php_am_server
[38]:
'{"1037190666": {"vorname": "J\\u00f6rg", "nachname": "Faschingbauer", "svnr": "1037190666"}, "6666010185": {"vorname": "Oliver", "nachname": "Schwarzbauer", "svnr": "6666010185"}}'

7. Jetzt schickman weg: vom Server (PHP) zum Browser (JS)

[39]:
transfer_string_in_js_am_browser = transfer_string_in_php_am_server

8. in JS JSON string empfangen

[40]:
transfer_string_in_js_am_browser
[40]:
'{"1037190666": {"vorname": "J\\u00f6rg", "nachname": "Faschingbauer", "svnr": "1037190666"}, "6666010185": {"vorname": "Oliver", "nachname": "Schwarzbauer", "svnr": "6666010185"}}'

9. Nun muessen wir den JSON-String in JS verwandlen

[41]:
# man denke sich hier, das waere JS
response_dict_am_browser = json.loads(transfer_string_in_js_am_browser)
[42]:
pprint.pprint(response_dict_am_browser)
{'1037190666': {'nachname': 'Faschingbauer',
                'svnr': '1037190666',
                'vorname': 'Jörg'},
 '6666010185': {'nachname': 'Schwarzbauer',
                'svnr': '6666010185',
                'vorname': 'Oliver'}}

## 10. Nun gilt es, die JS Datenstruktur in eine HTML

zu verwandeln, und diese Table schlussendlich im DOM an geeignete Stelle zu platzieren.

[43]:
meine_table = '<table>\n'
meine_table += ' <tr>\n'
meine_table += '  <th>Sozialversicherungsnummer</th>\n'
meine_table += '  <th>Vorname</th>\n'
meine_table += '  <th>Nachname</th>\n'
meine_table += ' </tr>\n'

for user in response_dict_am_browser.values():
    meine_table += ' <tr>\n'
    meine_table += '  <td>' + user['svnr'] + '</td>\n'
    meine_table += '  <td>' + user['vorname'] + '</td>\n'
    meine_table += '  <td>' + user['nachname'] + '</td>\n'
    meine_table += ' </tr>\n'

meine_table += '</table>\n'

Und dieses Element, die <table>, soll nun an eine geeignete Stelle im DOM platziert werden …

[44]:
print(meine_table)
<table>
 <tr>
  <th>Sozialversicherungsnummer</th>
  <th>Vorname</th>
  <th>Nachname</th>
 </tr>
 <tr>
  <td>1037190666</td>
  <td>Jörg</td>
  <td>Faschingbauer</td>
 </tr>
 <tr>
  <td>6666010185</td>
  <td>Oliver</td>
  <td>Schwarzbauer</td>
 </tr>
</table>