[英]Trying to create a list of 10 random numbers between 1-10 that do not repeat in python
[英]Python: Generating list of numbers 1-10, but 1 ends up at the end of the list?
我刚刚开始学习如何使用Python进行编程,并且已经通过一些练习来帮助我进行改进。 对于其中的一项练习,我必须编写一个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],但我不知道为什么这样做。 任何解释将不胜感激!
在Python中, list.insert(index, item)
实际上插入item
在BEFORE 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
list的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)
在列表的末尾插入/添加/添加元素。
我不知道为什么它会倒退,但是您的代码不是将元素添加到列表的方式。 另外,您不会在代码中使用变量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]
。
xrange可以为您完成此操作,请记住为xrange提供一个比您想要的值大一的最终值。
因此要生成从1到n的数字:xrange(1,n + 1)
下面的示例将为您提供1到10的列表。
>>> primelist=list(xrange(1,11))
>>> primelist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.