如何将模拟len()函数的for循环代码改写为while循环?
模拟len()的while循环实现方案
嘿,我来帮你搞定这个while循环改写的问题~
首先得说说你原来的while代码为啥跑不通:
- 你的循环条件
while list[i]是在判断列表第i个元素的布尔值,而不是判断是否还有元素可以遍历。比如如果列表里有0、''或者False这类“假值”,循环会直接提前终止; - 当索引
i超过列表的最大索引时,访问list[i]会直接抛出IndexError,程序崩溃,根本走不到返回结果那一步。
接下来给你两种正确的改写思路:
方法1:捕获索引异常(最贴近你的原始思路)
我们可以利用Python的异常处理机制,当尝试访问不存在的索引时,捕获IndexError来终止循环:
def length_itr_whl(lst): total = 0 i = 0 while True: try: # 尝试访问第i个元素,只要不报错就计数 lst[i] total += 1 i += 1 except IndexError: # 触发异常说明已经遍历完所有元素,跳出循环 break return total print(length_itr_whl([1,2,3,4,5])) # 输出5
方法2:利用迭代器(更贴近Python的for循环本质)
Python的for循环其实底层是基于迭代器实现的,我们可以手动用迭代器来模拟:
def length_itr_whl(lst): total = 0 # 把列表转换成迭代器 iterator = iter(lst) while True: try: # 尝试获取下一个元素,成功就计数 next(iterator) total += 1 except StopIteration: # 迭代器耗尽时触发异常,终止循环 break return total print(length_itr_whl([1,2,3,4,5,6,7,8])) # 输出8
这两种方法都能准确模拟len()的功能,不管列表里有没有假值,都能正确返回列表的实际长度~
内容的提问来源于stack exchange,提问作者bkk
相关产品推荐
相关产品推荐

