我刚刚开始学习如何使用Python进行编程,并且已经进行了一些练习来帮助我改进。对于其中一个练习,我必须编写一个Sierat of Eratosthenes,作为这样做的一部分,我想生成一个数字1到 n 的列表。
我的代码如下:
def primelist(n): #returns a list of all primes lower than or equal to n
grid=[]
k=1
while k in range (1, n+1):
grid.insert(-1, k)
k+=1
return grid
这是我所得到的,因为当我测试到目前为止我写的内容时:
print(primelist(10))
我的代码输出列表[2,3,4,5,6,7,8,9,10,1],我无法弄清楚为什么这样做。任何解释都将非常感谢!
答案 0 :(得分:3)
在Python中,list.insert(index, item)
实际上在item
之前插入index
。
所以list.insert(-1, k)
在-1之前插入k
。因此你的结果。
要做你想做的事情,以下两行是等价的
list.insert(len(list), k)
list.append(k)
两种方法都按预期修改实际列表(而不是返回新列表)。
在此处查看更多内容:https://mail.python.org/pipermail/tutor/2010-January/073754.html
答案 1 :(得分:1)
insert
方法在第一个参数之前的索引处插入元素。 -1
是最后一个元素的索引。因此,当您在-1
处插入时,您总是在最后一个元素之前插入。例如,您有一个列表a
:
a = [1,2,3,4]
print a[-1] # It will print 4
因此,当您尝试使用grid.insert(-1, k)
在列表中插入第一个元素(1)时,它会转到最后(或者首先因为它将只是元素),因为没有其他元素。第一个元素之后的所有插入操作都将元素添加到列表中的倒数第二个位置。
这导致您只看到1
在最后位置,而所有其他元素按预期顺序排列。
正如@coln已经提到的,您可以使用list.append(k)
或list.insert(len(list), k)
将元素插入/追加/添加到列表的末尾。
答案 2 :(得分:0)
我不知道它为什么倒退,但你的代码不是向列表中添加元素的方法。你也不要在你的代码中使用变量n
(可能是拼写错误),所以我只需添加函数来生成一个列表,从1到n
。
def primelist(n):
grid=[]
for k in range(1,n+1):
grid.append(k)
return grid
此代码将根据您的要求返回[1,2,3,4,5,6,7,8,9,10]
。
答案 3 :(得分:0)
因此要生成从1到n的数字:xrange(1,n + 1)
以下示例将为您提供1到10的列表。
>>> primelist=list(xrange(1,11))
>>> primelist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]