Seite 1 von 1

Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 19:50
von fahrradgott
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!

Re: Vergleich eines Elementes in einer Liste

Verfasst: Sonntag 4. September 2016, 19:59
von noisefloor
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

Re: Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 20:22
von fahrradgott
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'.

Re: Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 20:31
von noisefloor
Hallo,

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

Gruß, noisefloor

Re: Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 21:10
von fahrradgott
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')

Re: Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 21:33
von 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.

Re: Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 21:44
von Dav1d
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'

Re: Zugriff auf letztes Element in einer Liste

Verfasst: Sonntag 4. September 2016, 22:10
von 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.