リストの例を考えると:
list_1 = [[1, 2, 9], [4, 5, 8]]
list_2 = [[1, 2, 3], [4, 5, 6], [1, 2, 5]]
これは機能します:
print [this[0:2]==that[0:2] for this in list_1 for that in list_2]
[True, False, True, False, True, False]
または、セットを使用します。
print [this for this in list_1 for that in list_2 if set(this[0:2])<set(that)]
[[1, 2, 9], [1, 2, 9], [4, 5, 8]]
セットには順序がないことに注意してください。
>>> set([1,2])==set([2,1])
True
の典型的な使用法はin
文字列です:
>>> 'ab' in 'cbcbab'
True
またはシーケンス内の単一の要素:
>>> 100 in range(1000)
True
またはシーケンス内のアトミック要素:
>>> (3,3,3) in zip(*[range(10)]*3)
True
ただし、重なり合うリスト要素は機能しません。
>>> [1,2] in [0,1,2,3]
False
要素が同じ原子サイズでない限り:
>>> [1,2] in [0,[1,2],3]
True
ただし、次のように文字列を使用して、リスト a がリスト b の「内」にあることを比較できます。
>>> def stringy(li): return ''.join(map(str,li))
...
>>> stringy([1,2,9][0:2])
'12'
>>> stringy([1,2,9][0:2]) in stringy([1,2,5])
True
したがって、元の意図は、ループ内の「アイテム」の順序以外のitem[0:2]
どこかに表示されることを確認することである場合があります。otherItem
次のような文字列を使用できます。
>>> print [this for this in list_1 for that in list_2 if stringy(this[0:2]) in stringy(that)]
[[1, 2, 9], [1, 2, 9], [4, 5, 8]]
これは、以降のセット バージョンとは異なり'12'!='21'
ます'12' not in '21'
。したがって、list_2 の要素の順序を変更した場合:
list_1 = [[1, 2, 9], [4, 5, 8]]
list_2 = [[1, 2, 3], [4, 5, 6], [1, 5, 2]]
print [this for this in list_1 for that in list_2 if set(this[0:2])<set(that)]
[[1, 2, 9], [1, 2, 9], [4, 5, 8]] # same answer since sets are unordered
print [this for this in list_1 for that in list_2 if stringy(this[0:2]) in stringy(that)]
[[1, 2, 9], [4, 5, 8]] # different answer...