在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