通常我知道我们可以做 sum([func(x,x) for x in i])
,但我有一个 if 检查和两个 for 循环,那么什么是最 pythonic 的方式编写下面的代码。你可以假设无论你给它什么类型,相似度都会返回一个数字。您还可以假设它实际上只会获取整数和字符。
x = 0
if isinstance(a, dict) or isinstance(a, list) or isinstance(a, tuple):
for i in a:
for j in b:
x += similarity (i,j)
最佳答案
也许是这样的:
x=0
if isinstance(a,(dict,list,tuple)):
x=sum(similarity(i,j) for i in a for j in b)
或者:
x=(sum(similarity(i,j) for i in a for j in b) if isinstance(a,(dict,list,tuple))
else 0)
或者(假设字符串、集合或其他一些可迭代类型由于某种原因不会破坏您的函数):
try:
x=sum(similarity(i,j) for i in a for j in b)
except TypeError:
x=0
如果您特别希望测试某些东西是否可迭代,您可以这样做:
from collections import Iterable
if isinstance(e, Iterable):
...
如果有某些您不想要的可迭代类型,请对它们使用react:
if isinstance(e, Iterable) and not isinstance(el, str):
# an iterable that is not a string...
关于Python,编写两个for循环之和的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427663/