Seite 1 von 1

any - Funktion

Verfasst: Freitag 3. März 2017, 01:58
von Kneddel
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! :)

Re: any - Funktion

Verfasst: Freitag 3. März 2017, 02:10
von 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

Re: any - Funktion

Verfasst: Freitag 3. März 2017, 12:43
von Kneddel
Vielen Dank für die schnelle Antwort !!
LG