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

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]

    所以,你可以理解了?

    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • 这么写比较简洁:

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

    评论
    解决 1 无用
    打赏 举报
  • rm -rf r00t 2021-06-28 12:59
    #Function:for循环求质数
    
    a = []
    b = []
    
    #求100以内的非质数
    for i in range(2,101):
        a.append(i)
        for j in range(2,i):
            if (i%j == 0 and i != j):   #判断是否是质数
                 b.append(i)
                 break
    
    #将非质数从1-100中移除
    for tmp in b:
        if a.count(tmp) > 0:    #检查元素是否在列表中
            a.remove(tmp)
    
    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]

    这个是按照题主的思路可以实现功能的代码

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题