巴小迪 2021-06-28 11:34 采纳率: 75%
浏览 212
已结题

for循环之求质数问题

身份:小白

在python学习过程中,学到求100以内质数的时候,碰到一个小问题,求大神指点一下下

a = []
b = []
for i in range(2, 101):
    a.append(i)
    for j in range(2, i):
        if i % j == 0:
            b.append(i)
            break

在我把“20以内所有元素生成列表a,20以内除1与其本身之外还有其他因数的元素生成列表b”后,接下来:

for循环a列表,如果元素也在b中,就在a列表中移除该元素,打印a列表,最后的结果却是错的:

for i in a:
    if i in b:
        a.remove(i)
print(a)

# 结果:[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

而for循环b列表,如果元素也在a中,就在a列表中移除该元素,打印a列表,最后的结果才正确:

for i in b:
    if i in a:
        a.remove(i)
print(a)

# 结果:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

这是为什么呢?想了半天没想明白,是不是进入哪个误区了啊?/(ㄒoㄒ)/~~

  • 写回答

3条回答 默认 最新

  • CSDN专家-文盲老顾 2021-06-28 14:14
    关注

    首先,你要理解遍历的概念,比如 [1,2,3,4,5]

    遍历的时候,他正常来说是 1,2,3,4,5,但这个其实是不准确的,完整的理解是 [0],即第一个元素,[1],[2],[3],[4]

    当遍历列表是,你删除了一个元素,则后续元素向前移动了

    arr = [1,2,3,4,5]
    for i in arr:
        arr.remove(i)
        
    print(arr)
    
    arr[0],被删除,再次遍历时,寻找arr[1],而列表已变成 [2,3,4,5],这个时候删除 arr[1],变成[2,4,5],再删除 arr[2],最后arr里还有两个元素,[2,4]

    所以,你可以理解了?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月27日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?