在Python 2.6或更好,
next((i for i, sublist in enumerate(nested_list) if "a" in sublist), -1)
假設例如如果'a'
不存在於任何子列表中,則需要-1
結果。
當然,它也可以在老版本的Python中完成,但不是很容易,因爲您沒有指定您感興趣的Python版本,所以我認爲最好使用最新的基於生產的產品 - 固定的(如果您需要指定其他舊版本的Python,請編輯您的答案)。
編輯:根據要求,讓我試着解釋這是如何工作的。我使用內置函數next(特別是我打電話給next(iterator, default)
):返回迭代器的下一個項目(因此第一個,因爲這是我們第一次推進該迭代器),或者迭代器完成時的默認值(如果在完成之前完成,則表示「空」;-)。默認顯然是-1
,如果「a
不存在於任何子列表」中,則返回-1
,這意味着在這種情況下與「迭代器爲空」相同。
讓我們看看再迭代器:
(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
內部使用它,我們只採用第一個這樣的索引。
這個OP可能是合理的,因爲認爲一個神奇的內建人員在三個或四個字符中完成所有這些操作會更加方便 - 因此,對於這個非常具體的要求,我相信我以前從未見過超過十年的Python使用;然而,如果每一個這樣的具體要求都有自己非常專業化的內建語言,那麼內建的語言將會長於稅法。相反,Python提供了許多低級別的「樂高積木」和一些方便的方法將它們組合在一起,以清晰(並且合理簡潔地)表達解決方案,以組合大量的各種特定需求,如OP。
沒錯:這給子列表,而OP指定他們想要的子表的索引,正如我在回答返回。 – 2010-03-09 00:58:21