Im-Lamire 2023-12-12 18:56 采纳率: 50%
浏览 4
已结题

关于#python#的问题,请各位专家解答!

为什么输出不是3呢?为什么是2?

lst=[34,6,7,0,0,0,9]
n=0
for i in lst:
    if i==0:
        lst.remove(i)
        n+=1
print(n)


  • 写回答

1条回答 默认 最新

  • yiiiiiiim 2023-12-12 19:33
    关注

    在迭代列表的同时修改它的长度可能导致意外的行为。在你的代码中,当遇到第一个零时,lst 的长度被修改,导致后续元素的索引发生变化。这可能导致一些元素被跳过或被重复计数。

    在这个特定的例子中,当你移除第一个零时,列表变为 [34, 6, 7, 0, 0, 9],然后循环继续。当循环到第三个元素时,它是列表中的第一个零(原来的第二个零),但由于列表已经被修改,这个零被跳过了。因此,实际上只有两个零被计数。

    为了避免这个问题,你可以创建一个新的列表,或者使用列表推导式来过滤出不等于零的元素。以下是一种修正的方式:

    lst = [34, 6, 7, 0, 0, 0, 9]
    n = sum(1 for i in lst if i == 0)
    print(n)
    

    这种方式避免了在迭代过程中修改列表长度,因此输出将是3,对应于列表中的三个零。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 征集Python提取PDF文字属性的代码
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?