Python中如何创建带条件的range?高效统计可被11整除的数
如何高效统计大范围内可被11整除的数字数量?
Python原生的range语法本身不支持直接添加条件过滤,但你完全不需要生成整个序列来解决这个问题——用数学公式就能瞬间算出结果,这才是处理超大范围数值统计的最优方案。
核心思路:数学计算替代遍历
统计[start, end)范围内可被11整除的数的数量,只需要三步:
- 找到范围内第一个大于等于
start的11的倍数 - 找到范围内最后一个小于等于
end-1的11的倍数(因为range是左闭右开) - 用公式
(last - first) // 11 + 1计算总数(如果第一个倍数大于范围上限,结果为0)
对应代码实现:
start = 101 end = 9999999999999999999999999999999999999999999 # 计算第一个>=start的11的倍数 first = ((start + 10) // 11) * 11 # 计算最后一个<=end-1的11的倍数(因为range是左闭右开) last = ((end - 1) // 11) * 11 count = 0 if first <= last: count = (last - first) // 11 + 1 print(count)
如果需要迭代这些数(而非仅统计数量)
如果你需要逐个处理这些可被11整除的数,不要生成整个列表,用生成器按需生成即可,内存占用几乎为0:
def divisible_by_11(start, end): first = ((start + 10) // 11) * 11 last = ((end - 1) // 11) * 11 if first > last: return yield from range(first, last + 1, 11) # 示例:遍历输出部分数值 for num in divisible_by_11(101, 200): print(num)
这种方式既避免了超大序列的内存占用,又能高效获取目标数值,比直接遍历range或用numpy生成数组靠谱得多。
内容的提问来源于stack exchange,提问作者Alex Nikitin
相关产品推荐
相关产品推荐

