由于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
'if'不在任何循环内,所以...为什么它需要在'sum'内? – abarnert 2013-05-07 20:12:30
对于你的例子,你可以用'sum(func(x,y)for x in i)'作为生成器,而不是'sum([func(x,y)for x in i]不生成中间列表 – 2013-05-07 22:08:18