Inhalt von Variablen in einer Liste auslesen

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
Prometheus
User
Beiträge: 12
Registriert: Sonntag 26. November 2006, 16:14

Hi.

Code: Alles auswählen

#!/bin/python

foo = ''
bar = ''

x = [foo, bar]

if len(x) == 0:
  print "Exiting"
else:
  print"Okay"
Okay # Ausgabe
Wieso?

Da in der Liste x 2 Elemente enthalten und beide nicht null sind. Nun, was ich allerdings möchte, ist dass er mit die eine oder die andere Ausgabe gibt, wenn die Variablen leer oder eben nicht leer sind. Jedoch wird mit dieser Methode nur die Liste ausgelesen, jedoch nicht der Inhalt der Elemente in der Liste.
Exiting # Wannabe Ausgabe: Da beide Variablen keinen Wert enthalten
Wäre froh über eine kleine Hilfe.

P.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Naja, ist doch klar: Du packst 2 Vars in die Liste und fragst danach nach der Anzahl der Elemente der Liste. Die ist 2. Also ist len(x)==0 falsch.

Soweit ich weiß gibt es keine eingebaute Möglichkeit zu testen, ob alle Elemente einer Liste leer sind. Aber eine entsprechende Funktion sollte ja leicht zu schreiben sein.

Code: Alles auswählen

def check_all_items_empty(list_to_check):
    for item in list_to_check:
        if item:
            return False
    return True

Sollte gehen, oder?
BlackJack

@Prometheus: ``len(x)`` erfragt die Länge der Liste, und die ist nunmal 2 und nicht 0. Wenn Du etwas über die Elemente *in* der Liste wissen willst, dann musst Du auch *diese* Elemente befragen.

Da leere Zeichenketten als Wahrheitswert `False` sind, kann man Dein Beispiel einfach als ``if not all(x):`` formulieren.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Alternativ, je nach Geschmack:

Code: Alles auswählen

if not ''.join(x):print "Exiting"
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

print "okay" if all(["", ""]) else "exiting"
Beachte dass all True zurück gibt wenn die Liste leer ist.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Auch wenns schon zwei mal indirekt gesagt wurde: @Hendriks: Du hast all(<iterable>) implementiert. Ein Gegenstück gibts auch, any(<iterable>).
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

@str1442
Keine Ahnung was Du mir genau sagen willst. War nur ein Alternativvorschlag zu BlackJacks Lösung. Ich denke es ist manchmal ganz lehrreich, verschiedene Möglichkeiten zu sehen.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Ups, ich meinte Barrabas.
Antworten