Wahr und Falsch

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
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo zusammen,

Folgendes stimmt? Leere Sequenzen besitzen den Wahrheitswert False

Wenn ja, warum dann das? :

Code: Alles auswählen

>>> l=[]
>>> l==True
False
>>> l=[1,2,3]
>>> l==True
False
Müsste eine Sequenz wenn sie einen Wert hat auch den Wahrheitswert True haben :?:

Vielen Dank im Voraus

rolgal_reloaded
Benutzeravatar
Whitie
User
Beiträge: 216
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Hallo

Code: Alles auswählen

>>> l = []
>>> bool(l)
False
>>> l = [1, 2, 3]
>>> bool(l)
True
Gruß, Whitie
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo,

aha, aber warum geht es nicht auch wie oben?

rolgal_reloaded
BlackJack

Du hast aus

Code: Alles auswählen

In [78]: [] == True
Out[78]: False
etwas gefolgert was nicht stimmt. Das bedeutet nicht das im Umkehrschluss die leere Liste gleich `False` ist:

Code: Alles auswählen

In [79]: [] == False
Out[79]: False
Wenn das gelten würde dann müsste auch ``{} == False`` gelten und transitiv damit auch ``[] == {}``. Und spätestens da würde es sehr komisch werden.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hi BlackJack,

ich steig jetzt nicht mit, sorry :oops:

Es heisst in mehreren Büchern, dass leere Sequenzen den Wahrheitswert False haben :!: :?:

Dass [] == {} komisch wäre ist klar, deshalb ist mir aber das Andere nicht klar.

ro-re
Benutzeravatar
Whitie
User
Beiträge: 216
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Die Bücher haben schon recht, eine leere Liste hat den Wahrheitswert False. Sie hat deshalb aber nicht den Typ Boolean.

Code: Alles auswählen

>>> l = []
>>> type(l)
<type 'list'>
>>> b = False
>>> type(b)
<type 'bool'>
>>> l == b
False
Gruß, Whitie
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo,

das ist mir auch klar, aber trotzdem müsste eine leere liste False ergeben, genauso wie bei den Zahlen 1 und 0

Code: Alles auswählen

>>> 1==True
True
>>> 0==True
False
>>> 
LG

rolgal_reloaded
Benutzeravatar
Matflasch
User
Beiträge: 41
Registriert: Donnerstag 25. März 2004, 15:42
Wohnort: Hamburg
Kontaktdaten:

Evtl hilft dir das weiter:

Code: Alles auswählen

>>> lst=[]
>>> if lst:
...     print "Hallo"
...
>>> lst=[1,2,3]
>>> if lst:
...     print "Hallo"
...
Hallo
>>>
In sofern kann man den Wahrheitswert der Listen verwenden.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo Matflasch,

ist mir auch klar, warum das so läuft.
Eben weil das erste mal die Liste den Wert False und das zweite Mal den Wert True hat.

Oder nicht?

Wenn ja müsste bei

Code: Alles auswählen

lst==True
beides mal was anderes rauskommen.

LG

rolgal_reloaded
Benutzeravatar
Matflasch
User
Beiträge: 41
Registriert: Donnerstag 25. März 2004, 15:42
Wohnort: Hamburg
Kontaktdaten:

Genau, bei einer leeren Liste würde im prinzip auf if False: abgefragt werden... Sofern in der Liste was ist, evaluiert die Abfrage dann zu if True:

Aber wie Whitie schon geschrieben hat, eine leere Liste hat deshalb nicht den Typ boolean, sonst wäre es ja keine Liste mehr ;)

Code: Alles auswählen

>>> lst=[1,2,3]
>>> bool(lst) == True
True
>>> lst=[]
>>> bool(lst) == True
False
>>>
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

...jo bei mir hat es glaube ich inzwischen auch geklingelt.
Es geht natürlich um das was drin oder nicht drin ist und nicht um den Typ selbt, oder?

Code: Alles auswählen

>>> l=[]
>>> True in l
False
>>> l=[1,2,3]
>>> True in l
True
>>> 
Ist doch etwas anders dargestellt dasselbe wie du meinst?

LG

rolgal_reloaded
Benutzeravatar
Matflasch
User
Beiträge: 41
Registriert: Donnerstag 25. März 2004, 15:42
Wohnort: Hamburg
Kontaktdaten:

Nicht ganz, was würdest du sonst dazu sagen:

Code: Alles auswählen

>>> lst=[False]
>>> lst
[False]
>>> bool(lst) == True
True
>>> 
;)

Die Liste an sich ist ein Container. Sobald in der Liste etwas vorhanden ist, evaluiert der Wahrheitswert zu True, selbst wenn nur ein False in der Liste ist.
Der Wahrheitswert False einer leeren Liste ist schon an die Liste selbst gebunden.

Zu deinem Code hab ich dieses Beispiel noch:

Code: Alles auswählen

>>> lst=[2,3]
>>> True in lst
False
>>>
Genau genommen evaluiert die 1 in der Liste zu True, wenn du "True in lst" schreibst.

Code: Alles auswählen

>>> -1 == True
False
>>> 0 == True
False
>>> 1 == True
True
>>> 2 == True
False
>>> 3 == True
False
>>>
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Ich bin immer etwas ungenau, sorry:

True=1, der Wahrheitswert von 1 ist auch True, sowie der von 2, aber natürlich ist 2!=True

Deshalb muss bei deiner Liste natrülich ein False rauskommen bei bool(lst)

Ich glaube wir habens, bzw. ich
:D

LG

rolgal_reloaded
BlackJack

Hach, ja um die Verwirrung komplett zu machen:

Code: Alles auswählen

In [103]: True in [1, 2, 3]
Out[103]: True

In [104]: True in [4, 5, 6]
Out[104]: False
Das liegt daran das True nicht nur den Wert 1 hat, sondern auch eine ganze Zahl ist weil `bool` eine Unterklasse von `int` ist:

Code: Alles auswählen

In [105]: True == 0
Out[105]: False

In [106]: True == 1
Out[106]: True

In [107]: True + 1
Out[107]: 2

In [108]: isinstance(True, int)
Out[108]: True

In [109]: issubclass(bool, int)
Out[109]: True
Der Wahrheitswert eines Objekts ist aber schlicht und ergreifend das, was bei ``bool(obj)`` herauskommt. Das ist alles. Mehr gibt's da nicht zu verstehen.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Du hast die Wahrheitswerte von Objekten mit *den* beiden Wahrheitswerten, True und False, verwechselt. Die Objekte selbst sind immer noch... eben sie selbst :)
Antworten