如何在Python中使用if all语句?列表非递减检查函数实现疑问
解决列表非递减检查的问题
嘿,我懂你的困扰!你现在的checker(nums)函数只做了一次相邻元素的检查就直接返回结果,没法确保整个列表里每一个元素都大于等于前一个。而all()函数正好是干这个的——它会验证可迭代对象里的所有条件是否全部成立,只有当所有条件都满足时才返回True,只要有一个不满足就返回False。
具体实现思路
我们需要遍历列表中所有相邻的元素对,对每一对都判断「当前元素 >= 前一个元素」。这里可以用zip()函数把原列表和它的切片nums[1:]配对,这样就能得到像(nums[0], nums[1]), (nums[1], nums[2]), ...这样的相邻元素元组,然后用生成器表达式给all()提供判断条件。
完整代码示例
def checker(nums): # 处理空列表或单元素列表的特殊情况(默认满足非递减条件) if len(nums) <= 1: return True # zip(nums, nums[1:]) 生成所有相邻元素对,逐个检查是否满足 current >= prev return all(current >= prev for prev, current in zip(nums, nums[1:]))
测试验证
- 对于你给出的示例列表:
checker([1, 1, 2, 2, 3])→ 返回True - 对于不满足条件的列表:
checker([1, 3, 2])→ 返回False - 空列表或单个元素的列表:
checker([])或checker([5])→ 都返回True(因为没有需要检查的相邻元素,默认符合要求)
为什么你的原有代码不行?
如果你的原有代码是类似下面这种写法:
def checker(nums): if nums[1] >= nums[0]: return True
那它只会检查第一对相邻元素,只要这一对满足就直接返回True,完全不管后面的元素是否符合要求。而all()会遍历所有相邻元素对,确保每一对都满足条件后才返回True,完美解决你的问题~
内容的提问来源于stack exchange,提问作者LaurentiuS
相关产品推荐
相关产品推荐

