2012-10-09 12 views
11

私は2次元リストに値が含まれているかどうかを調べる方法は?

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

リストは、「値2」が含まれている場合どのように私は見ていますが、次のようなリストがありますか?

+0

あなたは2次元のリスト内の値のインデックスを表示したい場合は、私はこの回答を使用:https://stackoverflow.com/a/6518412/1799272 – Oli4

答えて

20

使用any()

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

おかげで、私は一致したアイテムを取得する方法がある場合、興味がありますか? – Tommyka

+1

探している値を含む項目を取得するには、通常のforループを使用して、リストに ''value2''が存在するときに戻り値を設定する必要があります。一致するすべての項目を検索する場合は、 '[sublistの 'value2'の場合はmylistのサブリストのサブリスト]'を使用できます。 –

7

あなたは、単にanyとすべてのサブリストを確認することができます。

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

、また短絡サポートするソリューション:

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

をそれがのように短絡していることを証明する:

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

'any'はすでに短絡しています。 '__nonzero__'を定義するクラスを作成し、そこに' print'文を入れ、 'any'への引数の2番目の値として使います(最初が' True'のとき)。 'print'文は実行されません。 –

+0

@poorsod私はこれを知っています。そのため、私は ''と似ています。 :) –

+0

ああ、私は誤解されています - あなたが短絡を使用する 'any'の代わりを提案していると思っていました。 –

2
'value2' in (item for sublist in mylist for item in sublist) 
関連する問題