在 Python 2.6 或更高版本中,
next((i for i, sublist in enumerate(nested_list) if "a" in sublist), -1)
假设例如如果'a' 不存在于任何子列表中,您需要-1 结果。
当然它也可以在旧版本的 Python 中完成,但不是那么方便,而且由于您没有指定您感兴趣的 Python 版本,我认为最好使用最新的生产实体一个(如果您需要指定其他较旧版本的 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 中使用它,所以我们只取第一个这样的索引。
OP 可能有理由认为一个神奇的内置函数在三个或四个字符中完成所有这些操作会更方便——对于这个非常具体的要求,它会更方便,我相信我以前从未遇到过使用 Python 十年;但是,如果每个这样的特定要求都有自己非常专业的内置语言,那么内置语言将变得比税法更大。取而代之的是,Python 提供了许多较低级别的“乐高积木”和一些方便的方式将它们组合在一起,以清晰地(并且相当简洁地)表达对各种特定要求(如 OP 的组合)的解决方案。