Seite 1 von 1

Inhalt von Variablen in einer Liste auslesen

Verfasst: Samstag 25. Juli 2009, 19:52
von Prometheus
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.

Verfasst: Samstag 25. Juli 2009, 20:03
von Barabbas
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?

Verfasst: Samstag 25. Juli 2009, 20:04
von 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.

Verfasst: Samstag 25. Juli 2009, 20:18
von hendrikS
Alternativ, je nach Geschmack:

Code: Alles auswählen

if not ''.join(x):print "Exiting"

Verfasst: Samstag 25. Juli 2009, 20:25
von DasIch

Code: Alles auswählen

print "okay" if all(["", ""]) else "exiting"
Beachte dass all True zurück gibt wenn die Liste leer ist.

Verfasst: Sonntag 26. Juli 2009, 13:43
von str1442
Auch wenns schon zwei mal indirekt gesagt wurde: @Hendriks: Du hast all(<iterable>) implementiert. Ein Gegenstück gibts auch, any(<iterable>).

Verfasst: Sonntag 26. Juli 2009, 14:51
von hendrikS
@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.

Verfasst: Sonntag 26. Juli 2009, 14:56
von str1442
Ups, ich meinte Barrabas.