В принципе, вы не можете сделать это в python с вложенным списком. Но если вы ищете оптимизированного подхода здесь несколько способов:
Используйте простой список понимания, сравнивая предполагаемый список только с первыми двумя пунктами суб списка:
>>> [sub for sub in totalist if sub[:2] == ['A', 'B']]
[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'X', 'Y', 'Z']]
Если вы хотите индексы использовать 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