any - Funktion

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
Kneddel
User
Beiträge: 8
Registriert: Samstag 12. November 2016, 18:16

Hallo Liebes Forum,
Wie kann ich überprüfen, ob ein Wert in einer verschachtelten Liste ist ? Ich bin schonmal auf die any- Funktion gestoßen und kam damit bisher darauf:

Code: Alles auswählen

if any((x == value for x in b) for b in NestedList):

Aber das spuckt mir immer True aus...
Könnt ihr mir vielleicht weiterhelfen?

LG und schonmal vielen Dank für die Antworten! :)
BlackJack

@Kneddel: Du übergibst als Argument einen Generator der für jede Unterliste einen Generatorerzeugt. Und diese Generatorobjekte sind alle ”wahr”, also kann da nur `True` bei heraus kommen:

Code: Alles auswählen

In [1]: nestet_list = [[1, 2, 3], [4, 5, 6]]

In [2]: value = 42

In [3]: any((x == value for x in b) for b in nestet_list)
Out[3]: True

In [4]: [(x == value for x in b) for b in nestet_list]
Out[4]: 
[<generator object <genexpr> at 0x94f3f7c>,
 <generator object <genexpr> at 0x94f37ac>]

In [5]: [(x == value for x in b) for b in nestet_list][0]
Out[5]: <generator object <genexpr> at 0x94f33ec>

In [6]: bool([(x == value for x in b) for b in nestet_list][0])
Out[6]: True
Du musst die inneren Generatorobjekte zu einem Wahrheitswert auswerten. Mit `any()`:

Code: Alles auswählen

In [7]: any(any(x == value for x in b) for b in nestet_list)
Out[7]: False

In [8]: any(any(x == 5 for x in b) for b in nestet_list)
Out[8]: True
Oder Du machst das ein bisschen einfacher mit ``in``:

Code: Alles auswählen

In [9]: any(value in b for b in nestet_list)
Out[9]: False

In [10]: any(5 in b for b in nestet_list)
Out[10]: True
Kneddel
User
Beiträge: 8
Registriert: Samstag 12. November 2016, 18:16

Vielen Dank für die schnelle Antwort !!
LG
Antworten