Frage zum arbeiten mit Listen

  • Decode() macht aus dem Byteobjekt einen String. Es ist der Gegenpart zur "encode()" Methode. Es könnte mit den entsprechenden Angaben auch aus Base64- oder Unicode Daten einen String machen. Wie Du richtig erkannt hast, entfernt strip() die Zeichen aus dem String, die man nicht haben will. Es ist eine Methode die zur String-Klasse gehört.

    Die Methode split() (ebenfalls eine String Methode) teilt den String in einzelnen Elemente auf, die zwischen dem als Parameter angegebenen "Trennzeichen" stehen. Das Trennzeichen ist nicht Bestandteil der Ergebnismenge. Die gefundenen Elemente werden als Liste zurückgegeben.


    Gruß Kai

  • Hallo Kai,

    verstehe ich das richtig ?

    Das decode macht aus einem Byte ( 8 Bit ) einen String. Das strip nimmt [] und \n raus. Das split nimmt das , und die Leerstelle raus und fügt die einzelnen Strings dann zu einer Liste zusammen ?


    Arbeite gerade in Python nicht in Micropython. Ziel dieser Übung ist es die Daten vom BME280 vom ESP32 seriell an den PC zu übertragen und dann dort in einem Python Programm mittels matplotlib grafisch darzustellen.


    Gruß Frank.

  • Es handelt sich um eine Liste aus 32 Zeichen.... du hast ja ein bytearray aus deiner seriellen Schnittstelle bekommen. Das "b" deutet es an.

    Ich weiß jetzt nicht ob es in Micropython so ohne weiteres funktioniert, aber du kannst aus der Bytefolge wieder eine Liste machen:


    Code
    1. daten = b'[3314, 25.74, 40.00782, 987.62]\n'
    2. erg=daten.decode().strip("[]\n").split(", ")
    3. print(erg[1])


    Gruß Kai

  • Hallo zusammen,

    habe noch ein weiteres Problem mit den Listen.

    1. Lese Daten von der seriellen Schnittstelle.

        serielledaten=serial.readline()

    das ergibt nach einem print auf der Konsole b'[3314, 25.74, 40.00782, 987.62]\n'

    2. Nun decodieren.

         daten=serielledaten.decode()

    das ergibt nach einem print auf der Konsole [3489, 25.76, 39.93945, 987.56]


    Nun bin ich davon ausgegangen das es sich dabei um eine Liste mit vier Einträgen handelt.
    Das ist aber nicht so, denn wenn ich sage schreibe mir den Listeneintrag mit dem Index 0 auf die Konsole dann bekomme ich ein [

    beim Index 1 bekomme ich eine 3

    Also habe ich mir die Länge der Liste ausgeben lassen mit print(len(daten)) und ich bekomme eine Listenlänge von 32 Elementen.


    Kann mir hier jemand auf die Sprünge helfen ?

    Gruß Frank.

  • Hallo Kai, Rene,

    danke für die Infos.

    Im Moment beschäftige ich mich halt mit den Grundlagen. Meine Beispiele haben keinen ernsthaften Hintergrund oder eine Anwendung im Blick,

    sie dienen lediglich zum experimentieren. Werde aber die Beispiele von Kai durcharbeiten.

    Werde mich im Moment wohl eher mit Micropython beschäftigen da der Mikrocontroller im Fokus liegt. Obwohl es für mich im Moment keinen Unterschied zwischen Mikropython und Python gibt da ich nur an der Oberfläche kratze.

    Der MC soll heute auch in der Post sein.

    Listen-Abstraktion (List Comprehension) ja mit dieser Schreibweise kann ich mich anfreunden. Im Moment sind meine Funktionsbeispiele aber zu trivial.

  • Hallo René,


    danke für den Hinweis auf den Unterschied von Python und Micropython... den habe ich bei meinem Posting nicht bedacht und deshalb auch nicht berücksichtigt.


    Gruß Kai

  • Hallo Frank,


    der Schwerpunkt des Kurses hier liegt immer auf der Anwendung im Bereich Mikrocontroller. Da ist List Comprehension nicht besonders gefragt. In Standardpython, insbesondere wenn es die Verarbeitung grosser Listen geht, ist es aber ein sehr wichtiges Konstrukt. Standardpython bietet auch sehr viele zusätzliche Möglichkeiten und Libraries an, die in Micropython aus Speicherplatzgründen nicht verwendet werden können. Es lohnt sich auf jeden Fall, sich damit zu beschäftigen.


    Wenn du dich für Standardpython interessierst, gibt es auf Youtube viele gute Kanäle. Spontan fallen mir The Morpheus Tutorials und Franneck ein.

    Beide haben umfangreiche Playlists zum Thema Python.


    Python Tutorials Deutsch (Morpheus)

    Programmieren in Python (Franneck)


    Insbesondere bei Frannek sind die Youtube - Videos aber nur vereinfachte Versionen seiner Udemy - Kurse.


    Gruss

    René

  • Hallo Frank,


    Du wolltest ein wenig zu Listen wissen. Bezugnehmend auf Dein Posting #2 in diesem Thread habe ich im folgenden mal ein paar "Spielarten" aufgeführt, wie Listen initialisiert werden können und die Zeit gemessen, die dazu gebraucht wird. Das Ergebnis zeigt einige Unterschiede. Man darf das Ergebnis nicht zu "dogmatisch" sehen. Jede Art hat, je nach Situation ihre Berechtigung bzw. kommt je nach Aufgabe gar nicht in Frage. Die Varianten sind auf Dein Beispiel bezogen.


    Außerdem ist noch ein Bespiel dabei, wie man die Werte einer Liste summieren kann. Man braucht keine Schleife dafür.


    Es kommen ein paar Sprachelemente vor, die in dem Kurs hier (so glaube ich) nicht besprochen wurden, lass Dich von denen nicht verwirren. Sie sind aber

    gut dokumentiert im Internet zu finden.

    "List Comprehensions" z.B. sind ein Konstrukt das recht mächtig ist und die häufig genutzt werden, weil man damit ganz gut mathematische Ausdrücke und Anweisungen verknüpfen kann. Da gibt es hier ein paar schöne Beispiele. Etwas mathematischer hier.



    Gruß Kai

  • Code
    1. for n in range(0,5): # Schleife 5 mal durchlaufen
    2. n = n + 1 # Zahlen 1 bis 5 erzeugen
    3. liste001.append(n) # Liste001 füllen => [1,2,3,4,5]
    4. print (liste001) # Liste ausgeben
    5. liste001.append(100) # noch die Zahl 100 hinzufügen
    6. print (liste001) # jetzt ist der Listeninhalt [1,2,3,4,5,100]


    Test !!!


    Danke Kai Gruß Frank.

  • Frank: Du warst schon nah dran.


    Ich habe hier mal ein paar Varianten:


    Etwas mehr zur formatierten Ausgabe gib es hier: Python3-Tutorial: formatierte Ausgabe


    Gruß Kai

  • Noch eine Frage :


    Bei print(liste001) bekomme ich bei der Ausgabe eckige Klammern.

    Wie kann ich diese unterdrücken ?

    Diese Frage beschäftigt sich ja mit der Formatierung bei dem PRINT Befehl.

    Hat jemand eine Liste mit den Formatierungsmöglichkeiten ?

    z.B. etwas in der Art wie : print ("blabla", end=" ") => kein Zeilenumbruch


    Ich hoffe meine Fragen sind nicht zu trivial für dieses Forum.Frage_zu_Listen.PNG


    Liste_erzeugen_V1.2_FK.txt

  • Hallo Rene,

    danke für Deine schnelle Antwort und deine konstruktive Kritik.

    Die von Dir vorgeschlagene kürzere Schreibweise werde ich versuchen in Zukunft zu beherzigen.

    Im Moment bin ich froh überhaupt zu einer Lösung zu kommen da ich noch blutiger Anfänger bin.

    Ich möchte Dir an dieser Stelle aber ein großes Kompliment zu dem was Du hier machst geben !!!

    Dieser selbstlose Einsatz und die eingebrachte Arbeit von Dir sind großartig.

  • Hallo Frank,


    deine Lösung ist korrekt. In vielen Programmiersprachen würde man genau so vorgehen. Python bietet aber noch einige weitere Möglichkeiten.


    Das Erzeugen der Liste kannst du abkürzen.

    Die Liste [1,2,3,4,5] kannst du direkt so erzeugen:


    Code
    1. list1 = list(range(1,6))


    Auch das Abarbeiten und Aufsummieren der Liste kann vereinfacht werden:


    Code
    1. summe = 0
    2. for element in liste001:
    3. print(element)
    4. summe += element
    5. print(summe)

    Gruss

    René

  • Habe zu schnell Hilfe gerufen.

    Habe selbst eine Lösung gefunden.

    Ihr könnt ja mal eine Meinung dazu abgeben.

    Mir kommt es im Moment nicht auf eine möglichst kurze Schreibweise an.


    Mein Lösungsansatz :


    liste001 = list() # eine leere Liste erzeugen

    print (liste001) # leere Liste ausgeben

    for n in range(1,6) : # Schleife 5 mal durchlaufen
        print (n+1) # Zahlen 1 bis 5 erzeugen
    .....liste001.append(n) # Liste001 füllen => [1,2,3,4,5]

    print (liste001) # Liste ausgeben
    liste001.append(100) # noch die Zahl 100 hinzufügen
    print (liste001) # jetzt ist der Listeninhalt [1,2,3,4,5,100]

    anzahl = len(liste001) #die Länge der Liste ermitteln

    print ("Die Liste hat",anzahl,"Elemente") # die Liste hat nun 6 Einträge

    summe = 0 # Variable bilden

    for n in range(anzahl) : # die Schleife wird so oft durchlaufen wie sie Einträge hat also 6 mal
            print(liste001[n]) # jedes Listenelement wird ausgegeben
    ........inhalt = (liste001[n]) # Listeninhalt in Variable übergeben
    ........summe = inhalt+summe # rechnen

    print (summe) # ausgeben


    Liste_erzeugen_V1.1_FK.txt

  • Hallo zusammen,

    habe jetzt angefangen mit Python zu arbeiten ( zu lernen ). Beim Experimentieren mit Listen komme ich schon an meine Grenzen ( Bin blutiger Anfänger ).

    Versuche den Kurs durchzuarbeiten.


    liste001 = list() # eine leere Liste erzeugen

    print (liste001) # leere Liste ausgeben

    for n in range(1,6): # Schleife 5 mal durchlaufen
    print (n+1) # Zahlen 1 bis 5 erzeugen
    liste001.append(n) # Liste001 füllen => [1,2,3,4,5]

    print (liste001) # Liste ausgeben
    liste001.append(100) # noch die Zahl 100 hinzufügen
    print (liste001) # jetzt ist der Listeninhalt [1,2,3,4,5,100]

    anzahl = len(liste001) #die Länge der Liste ermitteln

    print ("Die Liste hat",anzahl,"Elemente") # die Liste hat nun 6 Einträge

    for n in range(anzahl): # die Schleife wird so oft durchlaufen wie sie Einträge hat also 6 mal
    print(liste001[n]) # jedes Listenelement wird ausgegeben


    # Bis hierhin ist alles OK jetzt möchte ich alle Listenelemente addieren


    Nun möchte ich in der letzten for Schleife jedes Listenelement addieren ( summe = element1 + element2 + ... +element6 ) Die Summe sollte dann 115 sein.

    In der Variablen n steht ja nur der Zählwert also 1 bis 6. Wie bekomme ich nun die einzelnen Listenelemente in eine Variable ?