基本的には、これを入れ子リストでPythonで行うことはできません。しかし、あなたはここに最適化されたアプローチを探している場合は、いくつかの方法があります:あなたがインデックスをしたい場合
>>> [sub for sub in totalist if sub[:2] == ['A', 'B']]
[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'X', 'Y', 'Z']]
:
はサブリストの最初の2つの項目を意図したリストを比較することで、簡単なリスト内包を使ってenumerate
を使用します。
>>> [ind for ind, sub in enumerate(totalist) if sub[:2] == ['A', 'B']]
[0, 1]
そして、ここでは、大規模なデータセットを処理しているとき、かなり最適化されてnumpyのでアプローチです:
>>> import numpy as np
>>>
>>> totalist = np.array([['A','B','C','D','E'],
... ['A','B','X','Y','Z'],
... ['A','F','T','U','V'],
... ['A','F','M','N','O']])
>>> totalist[(totalist[:,:2]==['A', 'B']).all(axis=1)]
array([['A', 'B', 'C', 'D', 'E'],
['A', 'B', 'X', 'Y', 'Z']],
dtype='|S1')
また、あなたは、あなたが機能的な方法を探しているループを使用しない場合のpythonでの理解を一覧表示する代わりに、リスト内包として最適化されていないようfilter
機能、使用することができます。
を
>>> list(filter(lambda x: x[:2]==['A', 'B'], totalist))
[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'X', 'Y', 'Z']]
コードは、あなたが何をしようとしたのですか? –
答えを示唆しているように、何らかの形で反復せずにこれを解決する方法はありません。これを効率的にチェックすることが大きな優先事項である場合は、データの表現方法をリメイクする必要があります。スピードを改善するためにいくらかの空間複雑性を犠牲にする。たとえば、リストを作成するときに、どの行がプロパティを満たすかをメモすることができます。 – gowrath