假设我有一个列表的列表。
但是我曾经看到有人这样写它:
S = [list1, list2, ...]
我希望编写一个函数find
,针对输入x
,该函数将查找x
是否在S
的某个子列表中,并输出该列表或返回None
,如果未找到x
。
(注意:任何两个子列表的交集都为空,因此最多只能找到一个列表。)
我的代码非常简单:
def find(x):
for L in S:
if x in L:
return L
return None
但是我曾经看到有人这样写它:
def find(x):
try:
return next( L for L in S if x in L)
except StopIteration:
return None
我想知道这两个代码有什么区别?第二个代码比第一个更受欢迎吗?(例如,从软件项目的角度来看)
return next((L for L in S if x in L), None)
。 - AKSnext
中玩花样,却忘记了可选的第二个参数。它本可以写成一行代码,如return next((L for L in S if x in L), None)
。不管怎样,这可能是一个相当慢的操作。如果经常使用,你可能想要维护一个将元素映射到包含它们的列表的字典,以加速这个例程。 - user2357112