在Python2.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内部使用它,所以我们只取第一个这样的索引。
这个操作可能有理由认为一个用三个或四个字符来完成所有这些的魔法内置程序会更简单——而且对于这个非常特殊的需求,我相信我在使用Python的十多年中从未遇到过这样的需求;但是,如果每一个这样的特定要求都有自己非常专业的内置语言,那么语言和内置代码就会变得比税法还要大。相反,Python提供了许多低级的“乐高积木”和一些方便的方法来将它们组合在一起,以便清楚地(并且相当简洁地)表达对各种特定需求组合的解决方案,比如OP