如何编写all语句判断列表元素是否彼此相差±2
实现列表元素彼此相差±2的判断逻辑
你可以通过两种方式用all()语句实现需求:
方式一:直接比较所有元素对
这种方式逻辑直观,遍历每一对元素,检查它们的差值绝对值是否不超过2:
scores = [80,90,50,60,70] result = all(abs(x - y) <= 2 for x in scores for y in scores) # 你的示例列表中元素差值远超2,result会返回False
缺点是会重复比较元素对(比如x=80和y=90、x=90和y=80会被分别判断),但小规模列表下几乎不影响效率。
方式二:基于极值范围判断(更高效)
如果所有元素彼此相差不超过±2,那么列表的最大值与最小值的差必然≤2,且所有元素都落在[最小值, 最小值+2]区间内。利用这个逻辑可以写出更高效的代码:
scores = [80,90,50,60,70] min_score = min(scores) result = all(min_score <= x <= min_score + 2 for x in scores) # 示例列表的最小值是50,90远大于52,所以result为False
这种方式只需先计算一次最小值,再遍历一次列表,效率比方式一更高,尤其适合处理大列表。
对比你之前判断元素与固定值(如82)相差±2的代码,核心区别是把固定区间范围,换成了基于列表自身极值动态生成的区间。
内容的提问来源于stack exchange,提问作者newdeveloper
相关产品推荐
相关产品推荐

