python - Python - TypeError:'NoneType' 对象在 CodeWars 中不可迭代退出代码 - 它们是否相同?
问题描述
所以我正在做一个来自 CodeWars 的挑战,上面写着:
“给定两个数组 a 和 b,编写一个函数 comp(a, b),检查这两个数组是否具有“相同”元素,具有相同的多重性。“相同”在这里意味着 b 中的元素是一个平方,无论顺序如何。”
我的代码是:
def comp(array1, array2):
if array1==None or array2==None:
return False
array1 = list(array1)
array2 = list(array2)
array1.sort()
array2.sort()
z= 0
for i in range(len(array1)):
if array1[i]**2 == array2[i]:
z+=1
if z == len(array1):
return True
else:
return False
现在,我知道这个任务必须有更简单的代码,但我仍然是一个初学者程序员。
所以所有的测试都通过了。但我不断收到退出代码:
Traceback (most recent call last):
File "main.py", line 21, in <module>
test.assert_equals(comp(a1, a2), False)
File "/home/codewarrior/solution.py", line 10, in comp
if array1[i]**2 == array2[i]:
IndexError: list index out of range
如果我删除第一个“if array1= None.... return False”语句,它会给出这个退出代码:
Traceback (most recent call last):
File "main.py", line 18, in <module>
test.assert_equals(comp(a1, a2), False)
File "/home/codewarrior/solution.py", line 3, in comp
array2 = list(array2)
TypeError: 'NoneType' object is not iterable
所以无论如何,我的代码有问题,哈哈。有什么解决办法吗?
解决方案
您可能会出现的错误是由于列表的长度不同 - 您不会对此有所防范。
comp([1,2,3], [1,2])
您可以enumerate()
在一个数组上使用简化代码,然后查看另一个数组。我非常怀疑您的数组是否需要放入列表中-它们可能已经是-即使您可以使用以下步骤一步完成sorted()
:
def comp(array1, array2):
if array1 is None or array2 is None: # compare to None with is
return False
if len(array1) != len(array2):
return False
array1 = sorted(array1)
array2 = sorted(array2)
for idx,num in enumerate(array1):
if num*num != array2[idx]:
return False # early return on first mismatch
return True
如果您进行更多优化,您仍然可能会获得更好的结果 - 但您可以在自己的时间做到这一点:o) - 请考虑对此进行检查:
comp( [2]*100000000,[4]*100000000)
如果您使用set()
输入的排序列表而不是排序列表,则可以轻松加快速度,这样您就可以消除大约 99999999 次检查,这会影响您的运行时(除非您的数据集只包含唯一值开始) . 如果你有set()'s .. 如果有东西在里面,他们会非常快地查找 - 比从开始排序大列表更好更快...
推荐阅读
- sql - 确定过去 30 天内某个特定字段发生更改的时间。如果在另一个表中找到插入记录
- java - 无法将 csv 文件中的百万条记录插入 MySql 数据库
- sql - 从排名靠前的项目中获取差异
- cmake - CMake:如何从环境中添加 include() 的搜索路径?
- .net - .net5“部署一个独立的应用程序”没有 ssl 的 localhost 证书,没有安装 dotnet
- c# - 将只读结构作为“in”参数传递?
- c - 如何从其他 C 程序访问共享对象(.so)中的全局变量?
- javascript - 发布请求失败后不返回错误 - axios、express、node.js
- python - 调用氦的函数 start_chrome() 时出错
- python - 有条件地循环数据帧