我正在CodeWars中使用这个Kata,我通过了除了一个测试之外的所有测试,但它没有说出错误是什么。描述说要检查两个列表的多重性。列表a2是列表a1的正方形列表。我需要检查a1是否为a2中所有项的平方根,如果数组为空,则返回false,None,或者平方根不在a1中。
我希望得到你可能有的任何提示,不仅是功能(使它更多Pythonic),而是错误处理。我错过了什么?为什么不通过?提前谢谢。
def comp(a1, a2):
if a1 == [] or a2 == []:
return False
if a1 == None or a2 == None:
return False
pos_count = 0
neg_count = 0
for num in set(a2):
if num**0.5 in set(a1):
pos_count += 1
else:
neg_count += 1
if neg_count > 0:
return False
else:
return True
答案 0 :(得分:0)
您可以改进您发布的评论代码:
def comp(a1, a2):
if a1 is None or a2 is None:
return False
num_squared = []
for num1 in a1:
num_squared.append(num1**2)
if set(a2) == set(num_squared):
return True
else:
return False
您可以使用理解表达式构建序列。您可以通过将方块附加到空列表来构建列表,但您可以这样做:
num_squared = [num ** 2 for num in a1]
您创建了一个临时set
对象set(num_squared)
。但是,您可以使用与列表相同的方式构建集合:
num_squared = {num ** 2 for num in a1}
如果你有一个布尔表达式,然后返回True
else False
,你可以用表达式本身替换它:
return set(a2) == set(num_squared)
应用所有这些更改,您可以获得:
def comp(a1, a2):
if a1 is None or a2 is None:
return False
else:
return set(a2) == {num ** 2 for num in a1}
编辑:请注意:
空列表在布尔表达式中计算为False
:
>>> bool([])
False
此外,None
评估False
:
>>> bool(None)
False