由于if
不在循环内,因此在转换时它不需要在列表理解内:
x = 0
if isinstance(a, dict) or isinstance(a, list) or isinstance(a, tuple):
x = sum([similarity(i, j) for i in a for j in b])
同时,您在这里真的不需要列表推导,生成器表达式将具有相同的效果,而无需构建列表:
x = 0
if isinstance(a, dict) or isinstance(a, list) or isinstance(a, tuple):
x = sum(similarity(i, j) for i in a for j in b)
同时,isinstance
可以取一个tuple
类型来检查,所以:
x = 0
if isinstance(a, (dict, list, tuple)):
x = sum(similarity(i, j) for i in a for j in b)
......但实际上,我认为你不想首先检查。只要a
是可迭代的,代码就可以工作,所以……我为什么要强迫它成为那些特定的类型?如果您不想要异常,只需处理异常:
try:
x = sum(similarity(i, j) for i in a for j in b))
except TypeError:
x = 0