Python如何判断列表是否为降序?代码报int不可迭代错误求解
报错原因及代码修正说明
直接报错原因
你第2行代码for num in len(list)中,len(list)返回的是代表列表长度的整数,Python的for循环只能遍历可迭代对象(比如列表、range对象、字符串等),整数不属于可迭代对象,因此触发了'int' object is not iterable报错。
其他隐藏问题
除了直接报错外,你的代码还有多处逻辑和规范问题:
- 不要用Python内置类型名
list作为参数名,会覆盖内置的list功能,属于不规范的编码习惯 - 就算把
len(list)改成range(len(list)),后续取list[num+1]的时候也会出现索引越界问题:列表最后一个索引是len(list)-1,num取到最大值时num+1会超出索引范围 - 判断逻辑和需求不符:你需要判断列表是否为降序排列,但现有逻辑的判断方向完全相反,且触发判断的条件写错了:降序要求前一个元素始终大于后一个元素,只要出现前一个小于等于后一个的情况,就应该直接返回False
- 没有兼容空列表或者只有1个元素的情况:这类列表默认符合降序规则,但你的代码不会给
check变量赋值,直接返回会触发变量未定义的报错
修正后的参考代码
def is_descending(input_list): # 空列表或单元素列表默认符合降序规则,直接返回True if len(input_list) <= 1: return True # 仅遍历到倒数第二个元素即可,避免索引越界 for i in range(len(input_list)-1): # 只要出现前一个元素小于等于后一个,就不是降序 if input_list[i] <= input_list[i+1]: return False return True
内容的提问来源于stack exchange,提问作者Nicolás Marcelo
相关产品推荐
相关产品推荐

