Listenlänge
Hallo,
hab als Python-Anfänger nur ne simple Frage:
Gibt es denn in Python keinen Befehl, um die Länge der Liste auszugeben, so etwas wie beispielsweise listenname.length oder sowas?
Ich würde nämlich gerne das letzte Element meiner Liste ansprechen ohne einen festen Wert rein zu kodieren.
Danke im Voraus für eure Antworten.
Gruß,
Stay
hab als Python-Anfänger nur ne simple Frage:
Gibt es denn in Python keinen Befehl, um die Länge der Liste auszugeben, so etwas wie beispielsweise listenname.length oder sowas?
Ich würde nämlich gerne das letzte Element meiner Liste ansprechen ohne einen festen Wert rein zu kodieren.
Danke im Voraus für eure Antworten.
Gruß,
Stay
Du suchst len(liste), du kannst aber auch auf den letzten Wert mit dem Index -1 zugreifen:
Grüße fs111
Code: Alles auswählen
>>> liste = [1,2,3,4,5]
>>> liste[-1]
5
>>> liste = [1,2,3,4,5,6,7,8]
>>> liste[-1]
8
>>>
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Hallo,
ich habe das mit der len(Liste) ausprobiert und immer eine Fehlermeldung bekommen.
Wo liegt mein Fehler?
Fehlermeldung:
PS. Code ist aus einem Tutorial.
Gruß
Aquerias
ich habe das mit der len(Liste) ausprobiert und immer eine Fehlermeldung bekommen.
Wo liegt mein Fehler?
Code: Alles auswählen
horsemen = ["war", "famine", "pestilence", "death"]
i = 0
while i < len(horsemen):
print horsemen[i]
i = i + 1
Code: Alles auswählen
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
TypeError: 'int' object is not callable
Gruß
Aquerias
Den Fehler bekommst du nicht mit dem Code, den du gepostet hast (wenn du ihn korrekt einrückst).
Der Fehler "xxx is not callable" kommt meist dadurch, dass man vor einer offenen klammer ein trennzeichen vergisst, z.B. in einer liste:
Zu der Schleife möchte ich ausserdem sagen, dass es "unpythonic" ist, per index zu iterieren, cooler und einfacher wäre
Der Fehler "xxx is not callable" kommt meist dadurch, dass man vor einer offenen klammer ein trennzeichen vergisst, z.B. in einer liste:
Code: Alles auswählen
lst = [ 1, (1,2,3) ] #korrekt
lst = [1 (1,2,3) ] # fehler, weil das so aussieht, als würdest du "1" wie eine funktion mit den argumenten 1,2,3 aufrufen wollen
Code: Alles auswählen
horsemen = ['war', 'famine', 'death', 'pestilence']
for horseman in horsemen:
print horseman
Hallo keppla,
danke für die schnelle Antwort,
tut mir leid, aber ich bekomme das nicht hin. Wie muss die Zeile nun ausehen?
So?:
oder so?
Für die Schleife kann ich nichts. Ist ja wie gesagt aus einem Tutorial.
Dieses Schleife ist natürlich um einiges besser. Was mache ich aber wenn ich in einer Liste nur jeden zweiten Wert bearbeiten oder ausgeben möchte? Da bin ich doch auf das iterieren über einen Index angewiesen.
Gruß
Aquerias
danke für die schnelle Antwort,
tut mir leid, aber ich bekomme das nicht hin. Wie muss die Zeile nun ausehen?
So?:
Code: Alles auswählen
while i < len( horsemen ):
Code: Alles auswählen
while i < len[ horsemen ]:
Code: Alles auswählen
horsemen = ['war', 'famine', 'death', 'pestilence']
for horseman in horsemen:
print horseman
Gruß
Aquerias
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, du definierst eine Schrittweite:Aquerias hat geschrieben:Dieses Schleife ist natürlich um einiges besser. Was mache ich aber wenn ich in einer Liste nur jeden zweiten Wert bearbeiten oder ausgeben möchte? Da bin ich doch auf das iterieren über einen Index angewiesen.Code: Alles auswählen
horsemen = ['war', 'famine', 'death', 'pestilence'] for horseman in horsemen: print horseman
Code: Alles auswählen
horsemen = ['war', 'famine', 'death', 'pestilence']
for horseman in horsemen[::2]:
print horseman
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
der code funktioniert, keine ahnung wie du damit ein "not callable" hinbekommst.
Code: Alles auswählen
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.13
Type "help", "copyright", "credits" or "license" for mo
>>> horsemen = ["war", "famine", "pestilence", "death"]
>>>
>>> i = 0
>>> while i < len(horsemen):
... print horsemen[i]
... i = i + 1
...
war
famine
pestilence
death
>>>
Code: Alles auswählen
while i < len( horsemen ): #so muss das heissen. len ist eine funktion, die liste ihr parameter
while i < len[ horsemen ]: #hier müsste len ein dict oder eine liste sein ... macht also kein sinn.
Die Fehlermeldung kann man sich auch einhandeln wenn man `len` an eine Zahl bindet:
Das tust Du in dem Quelltext, denn Du gezeigt hast aber nicht.
Jeden zweiten Wert ohne Index bekommst Du mit der Slice-Syntax, dann wird erst eine neue Liste erzeugt, oder mit `itertools.islice()`, das ist "lazy":
Code: Alles auswählen
In [507]: len = 42
In [508]: len([1, 2, 3])
---------------------------------------------------------------------------
<type 'exceptions.TypeError'> Traceback (most recent call last)
/home/bj/<ipython console> in <module>()
<type 'exceptions.TypeError'>: 'int' object is not callable
Jeden zweiten Wert ohne Index bekommst Du mit der Slice-Syntax, dann wird erst eine neue Liste erzeugt, oder mit `itertools.islice()`, das ist "lazy":
Code: Alles auswählen
In [516]: horsemen = ['war', 'famine', 'death', 'pestilence']
In [517]: for horseman in horsemen[::2]:
.....: print horseman
.....:
war
death
In [518]: for horseman in itertools.islice(horsemen, None, None, 2):
.....: print horseman
.....:
war
death
nutzt ihr ?
wenn ich sowas wirklich mal brauche mache ich das "per hand"... ist mir zu mysteriös, schlecht lesbar.
Code: Alles auswählen
liste[::step]
wenn ich sowas wirklich mal brauche mache ich das "per hand"... ist mir zu mysteriös, schlecht lesbar.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Die Syntax ist liste[start:stop:schrittweite]. Was ist daran schwer lesbar?
Weglassen von start oder stop bedeutet "von Anfang" oder "bis Ende".
Code: Alles auswählen
>>> a = [1, 2, 3, 4, 5, 6]
>>> a[2]
3
>>> a[2:4]
[3, 4]
>>> a[2:]
[3, 4, 5, 6]
>>> a[:]
[1, 2, 3, 4, 5, 6]
>>> a[::2]
[1, 3, 5]
>>> a[2:6:3]
[3, 6]
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
ist schon klar, aber da ich eine von 1 abweichende schrittweite extrem selten benötige mache ich es dann wenn es mal sein muss explizit.
versuche meinen code lesbar zu halten. (ich bin nicht der einzige der den lesen können muss)
versuche meinen code lesbar zu halten. (ich bin nicht der einzige der den lesen können muss)
Ich nutze das, oder die `islice()`-Alternative. Von Hand ist mir zu umständlich und fehleranfällig.
Vielen Dank für die vielen Antworten,
war echt hilfreich.
Wenn ich nun folgendes eingebe:
bekomme ich (wie gewünscht) "war" und "death" ausgegeben.
Wenn ich das richtig verstanden habe wird eine neue Liste mit dem Namen "horseman" erstellt. Wenn ich diese Liste ausgebe bekomme ich allerdings nur den letzten Wert "death".
Wie kann ich vermeiden das in der neuen Liste der "war" mit "death" ersetzt wird?
Gruß
Aquerias
war echt hilfreich.
Wenn ich nun folgendes eingebe:
Code: Alles auswählen
horsemen = ['war', 'famine', 'death', 'pestilence']
for horseman in itertools.islice(horsemen, None, None, 2):
print horseman
Wenn ich das richtig verstanden habe wird eine neue Liste mit dem Namen "horseman" erstellt. Wenn ich diese Liste ausgebe bekomme ich allerdings nur den letzten Wert "death".
Wie kann ich vermeiden das in der neuen Liste der "war" mit "death" ersetzt wird?
Gruß
Aquerias
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Offtopic: du solltest deine 4 horsemen mal updaten; Pestilence ist in den 40ern in den Ruhestand gegangen und Pollution hat übernommen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
itertools.islice() erstellt Generatoren und keine Listen, das ist eben der Unterschied zu der Slice-Syntax. ``print horseman[::2]`` gibt die von dir gewünschten Werte in einer Liste aus.Aquerias hat geschrieben:bekomme ich (wie gewünscht) "war" und "death" ausgegeben.Code: Alles auswählen
horsemen = ['war', 'famine', 'death', 'pestilence'] for horseman in itertools.islice(horsemen, None, None, 2): print horseman
Wenn ich das richtig verstanden habe wird eine neue Liste mit dem Namen "horseman" erstellt. Wenn ich diese Liste ausgebe bekomme ich allerdings nur den letzten Wert "death".
@Jona: Ich kann es mir nicht vorstellen dass [start:stop:step] zu kompliziert ist.. eine manuelle Variante (wie würdest du die machen) ist meiner Meinung nach komplizierter.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice