append()函数是否同时向另一个列表添加索引和值?

2024-09-23 00:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我试图理解的代码:

这段代码是对Erastothenes的筛选的实现。如果我理解正确的话,那么到第8行,代码创建了一个素数到N的列表,这个列表是一个布尔列表,其中True-素数;False-非素数;索引号与我们输出的数字匹配。你知道吗

我的问题是: 对于第9-13行,脚本是否用新列表中的索引和布尔值“重写”素数(它们只是真值),以便我们在最后打印它们? 另外,如果primes是一个布尔列表,为什么python会在末尾打印索引值而不是一堆真参数?你知道吗

更新:我知道了,谢谢大家!range是一组2-n+1的整数,因此我也是整数,这就是为什么我在primes字符串中得到整数。出于某种原因,我认为range是list1的缩写

def sita(N):
    list1 = [True for _ in range(N + 1)]
    list1[0:1] = [False, False]
    for start in range(2, N + 1):
        if list1[start]:
            for i in range(2 * start, N + 1, start):
                list1[i] = False
    primes = []  #create empty list
    for i in range(2, N + 1):
        if list1[i]:
            primes.append(i)
    return primes
print(sita(int(input("Dati un numar N: "))))

Tags: 代码infalsetrue列表forifrange
2条回答

primes.append(i)仅附加其参数i。没有什么魔法能在列表中附加任何东西。你知道吗

在您的代码中,有两个独立的列表:list1primes

  • 第一个包含每个非负整数的布尔值。

  • 第二个包含在第一个循环末尾list1包含True的整数(这就是if list1[i]检查所做的)。

循环for i in range(2, N + 1):在实际索引上循环。它测试list1[i]中的布尔值,但只存储索引。布尔值(list1[i])无需编写;您append编辑了i这一事实表明测试已通过,并且i已知对应于一个素数。因为primes是从头开始构建的,所以它根本不包含布尔值,只包含在最后一个循环中分配给它的各种i值(测试并找到prime)append。你知道吗

相关问题 更多 >