2012-10-09 10 views
11

Mam listę jak poJak ustalić, czy lista dwuwymiarowa zawiera wartość?

mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 

jak mogę sprawdzić, czy lista zawiera „wartość2”?

+0

Jeśli chcesz zobaczyć indeks wartości w wykazie 2 wymiarowej, użyłem tej odpowiedzi: https://stackoverflow.com/a/6518412/1799272 – Oli4

Odpowiedz

20

Korzystając any():

any('value2' in sublist for sublist in mylist) 
+0

Dzięki, jestem ciekawy, czy istnieje sposób, aby uzyskać przedmiot, który został dopasowany? – Tommyka

+1

Aby uzyskać pozycję zawierającą wartość, której szukasz, powinieneś użyć zwykłej pętli 'for' i powrócić lub przerwać, gdy na liście znajduje się' 'value2''. Jeśli chcesz znaleźć wszystkie pasujące elementy, możesz użyć "[podlista dla podlist w mylist, jeśli" wartość2 "na podlistie]". –

7

można po prostu sprawdzić wszystkie listy zagnieżdżone z any:

any('value2' in subl for subl in mylist) 
0

podobny do any(), rozwiązanie, które obsługuje również zwarcia:

>>> from itertools import chain 
>>> mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 
>>> 'value2' in chain(*mylist) 
True 

dowód, że zwarcie takie jak any():

>>> it=chain(*mylist) 
>>> 'value2' in it 
True 
>>> list(it) #part of iterable still not traversed 
['value3', 'secval1', 'secval2', 'secval3'] 
+0

'any' już robi zwarcie. Przetestuj go, tworząc klasę, która definiuje '__nonzero__', umieść tam instrukcję' print' i użyj jej jako drugiej wartości w argumencie do 'any' (kiedy pierwszym jest' True'). Instrukcja 'print' nie zostanie wykonana. –

+0

@poorsod Wiem o tym, dlatego powiedziałem "" podobny do dowolnego() "'. :) –

+0

Och, źle zrozumiałem - myślałem, że sugerujesz zastąpienie "jakiegokolwiek", który używa zwarcia. –

2
'value2' in (item for sublist in mylist for item in sublist) 
Powiązane problemy