由於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