Verständnisfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TheNormalGuy
User
Beiträge: 3
Registriert: Freitag 22. April 2022, 11:05

Hallo an alle und ein schönes Wochenende,
ich habe ein Frage zum Verständnis dieses Codes.

Code: Alles auswählen

blockchain = [[1]]

def get_last_blockchain_value():
    return blockchain[-1]

def add_value(transaction_amout):
    blockchain.append([get_last_blockchain_value(), transaction_amout])

add_value(1)
add_value(3)
add_value(10)
add_value(7)

print(blockchain)
Für was stehen die doppelten [] in dem oben genannten Beispiel?

Code: Alles auswählen

blockchain = [[1]]
Ich verstehe den ganzen Code. Nur das eben nicht.

Danke für eure Hilfen!
Onomatopoesie
User
Beiträge: 41
Registriert: Montag 12. August 2019, 07:52

Es wird eine Liste in der Liste erzeugt. Das siehst du später auch in der Ausgabe: Liste in Liste in Liste ...
>>> [[1], [[1], 1], [[[1], 1], 3], [[[[1], 1], 3], 10], [[[[[1], 1], 3], 10], 7]]
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TheNormalGuy: Ergänzend zur Antwort von Onomatopoesie: Man sollte keine globalen Variablen verwenden. Das ist verwirrend das die Funktionen auf magische Weise auf die eine Datenstruktur zugreifen und die eine Funktion sie sogar verändert, ohne dass man das an der Funktionssignatur sehen kann.

Und ich habe das Beispiel mal um eine kleine Änderung der Liste und eine weitere Ausgabe erweitert, damit man sieht, dass das keine vollständig unabhängige Listen sind:

Code: Alles auswählen

#!/usr/bin/env python3


def get_last_value(blockchain):
    return blockchain[-1]


def add_value(blockchain, transaction_amout):
    blockchain.append([get_last_value(blockchain), transaction_amout])


def main():
    blockchain = [[1]]
    for value in [1, 3, 10, 7]:
        add_value(blockchain, value)
    print(blockchain)
    
    blockchain[0][0] = 42
    print(blockchain)


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

[[1], [[1], 1], [[[1], 1], 3], [[[[1], 1], 3], 10], [[[[[1], 1], 3], 10], 7]]
[[42], [[42], 1], [[[42], 1], 3], [[[[42], 1], 3], 10], [[[[[42], 1], 3], 10], 7]]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten