В Python 2.6 или лучше,
next((i for i, sublist in enumerate(nested_list) if "a" in sublist), -1)
при условии, например, Вы хотите получить результат -1
, если 'a'
отсутствует ни в одном из подсписков.
Конечно, это можно сделать и в более старых версиях Python, но не так удобно, и, поскольку вы не указываете, какие версии Python вас интересуют, я думаю, что лучше использовать последние версии Solid-Solid. один (просто отредактируйте свой ответ, если вам нужно указать другие, более старые версии Python).
Редактировать : для каждого запроса, позвольте мне попытаться объяснить, как это работает. Я использую (новую в 2.6) встроенную функцию next , в частности, я вызываю next(iterator, default)
: возвращает следующий элемент итератора (и, следовательно, первый, поскольку это первый раз мы продвигаем этот итератор) или значение по умолчанию, если итератор завершен (что означает «пустой», если он завершен до того, как мы его продвинули ;-). По умолчанию ясно, что -1
и возвращается, если «a
отсутствует ни в одном из подсписков», что означает то же самое, что «итератор пуст» в этом случае.
Давайте снова посмотрим на итератор:
(i for i, sublist in enumerate(nested_list) if "a" in sublist)
(округленные) круглые скобки и ключевые слова for
и if
означают, что это генераторное выражение, также известное для краткости как genexp. i
(индекс) и sublist
(элемент с этим индексом) опережают enumerate(nested_list)
- если бы у нас не было enumerate
здесь, мы бы не отслеживали индекс, но в этом на случай, если нам это нужно. Они рассматриваются только тогда, когда удовлетворено предложение if
, то есть когда искомый элемент присутствует в текущем подсписке.
Таким образом, этот genexp создает по одному каждому значению индекса, так что подсписок в этом индексе удовлетворяет условию "a" in sublist
. Поскольку мы используем его внутри next
, мы берем только первый такой индекс.
ОП может быть оправданным для того, чтобы думать, что магическое построение, делающее все это в трех или четырех символах, было бы более удобным - и так было бы, для этого очень специфического требования, которое, я полагаю, я никогда раньше не встречал в десять лет использования Python; однако, если бы каждое такое конкретное требование имело свой собственный очень специализированный встроенный язык, встроенные в него значения были бы больше налогового кодекса. Вместо этого Python предлагает множество «лего-кирпичей» более низкого уровня и несколько удобных способов их объединения, чтобы четко (и достаточно кратко) выразить решение комбинаторно-большого разнообразия конкретных требований, таких как ОП.