Zugriff auf letztes Element in einer Liste

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
fahrradgott
User
Beiträge: 3
Registriert: Sonntag 4. September 2016, 19:36

Hallo allerseits!

ich lerne gerade Python.
Nun komme ich aber nicht weiter.

Mein Code:

Code: Alles auswählen

# define a list
name = "Anton"
eat = "Hamburger"
eat_date =  ['2 Aug 2016 15:30:00', '13 Sep 2016 18:42:32']
eat_price = [5.43, 6.64]
data = ( name, eat, eat_date, eat_price )
Wie kann ich nur auf das letzte Element von eat_date über data zugreifen?
Mit

Code: Alles auswählen

 data( () () [-1] [] )
funktioniert das leider nicht. :K

Vielen Dank schon mal im Voraus!
Benutzeravatar
noisefloor
User
Beiträge: 4253
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das funktioniert nicht, weil es dieses "Konstrukt", was du versucht hast, gar nicht in Python gibt.

`data` ist bei dir ein Tupel, darin hat jedes Element einen Index, das erste Element hat den Index null.
Wenn jetzt ein Element, dass in `data` enthalten ist, wiederum mehrere Element enthält (wie z.B. `eat_date`), dann kann du darauf wieder einen Index anwenden.

Beispiel:

Code: Alles auswählen

>>> my_list = ["foo", ["spam", "egg"]]
>>> my_list[1]
['spam', 'egg']
>>> my_list[1][0]
'spam'
An das letzte Element kommt du übrigens auch mit dem Index `-1`.

Gruß, noisefloor
fahrradgott
User
Beiträge: 3
Registriert: Sonntag 4. September 2016, 19:36

Heißt es, dass 'name' und 'eat' auch von Typ Liste sein müssen? Also:

Code: Alles auswählen

name  =   ['Anton'] 
eat =  ['Hamburger']
Wobei 'name' und 'eat' unverändert bleiben und nicht erweitert werden. Es bleibt nur je ein Wert von Typ string.
Erweitert wird nur 'eat_date' und 'eat_price'.
Benutzeravatar
noisefloor
User
Beiträge: 4253
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Nee, muss nicht. Du kannst in Listen und Tupeln problemlos Datentypen mischen.

Gruß, noisefloor
fahrradgott
User
Beiträge: 3
Registriert: Sonntag 4. September 2016, 19:36

Ich möchte nun das eat_date von Typ string in datum kovertieren.
Jetzt ist das date_num vom Class datetime.datetime.
Wie kann ich es in einer Schleife als Liste iteratieren?

Code: Alles auswählen

from datetime import datetime
for i in range(0,1):
    date_num[i] = datetime.strptime(eat_date[i], '%d %b %Y %H:%M:%S')
BlackJack

@fahrradgott: Was Du da mit dem `range()` veranstaltest ist in Python ein „anti pattern“. Man kann *direkt* über die Elemente in Sequenzen wie Listen iterieren, ohne einen Umweg über einen Index gehen zu müssen. Wenn man eine neue Liste mit Werten erstellen möchte, dann erstellt man eine leere Liste und hängt dort die einzelnen Element der Reihe nach an.

Arbeite doch am besten mal ein Grundlagentutorial durch. In der Python-Dokumentation gibt es eines. Für absolute Programmieranfänger wird auch oft Learn Python The Hard Way empfohlen. Nicht vom Titel irritieren lassen.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Nein, die Datentypen können alles sein:

Code: Alles auswählen

In [2]: name = "Anton"

In [3]: eat = "Hamburger"

In [4]: eat_date =  ['2 Aug 2016 15:30:00', '13 Sep 2016 18:42:32']

In [5]: eat_price = [5.43, 6.64]

In [6]: data = ( name, eat, eat_date, eat_price )

In [7]: data[2][-1]
Out[7]: '13 Sep 2016 18:42:32'
In deinem Fall bietet sich ein `collections.namedtuple` an:

Code: Alles auswählen

In [10]: MealData = namedtuple('MealData', ['name', 'meal', 'dates', 'prices'])

In [11]: data = MealData(name, eat, eat_date, eat_price)

In [12]: data.dates[-1]
Out[12]: '13 Sep 2016 18:42:32'
the more they change the more they stay the same
BlackJack

Falls Preis und Datum jeweils zusammengehören, sollte man sie nicht in ”parallelen” Listen speichern. Und das Datum auch nicht als Zeichenkette, sondern als `datetime`-Exemplare.
Antworten