2016-08-14 41 views
1

我剛剛開始學習如何使用Python進行編程,並且已經通過一些練習來幫助我改進。對於其中一個練習,我必須編寫一個Eratosthenes篩,作爲這樣做的一部分,我想生成一個數字列表1到nPython:生成數字1-10的列表,但1結束在列表的末尾?

我的代碼如下:

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

將'python'標籤添加到您的問題將使您更容易得到一個快速的答案。 – atayenel

回答

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]

+0

是的,那是一個錯字,對不起。謝謝,這使得更多的意義! – leob

+0

@leob嘗試後,你可以接受它作爲正確的答案,這對你和我都有好處。 – atayenel

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

0

x範圍可以爲你做這個,記得給的xrange一個終值比你想要的一個。

因此,要生成數字從1到n:x範圍(1,N + 1)

下面的例子將會給你從1列表以10

>>> primelist=list(xrange(1,11)) 
>>> primelist 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
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)在列表的末尾插入/追加/添加元素。

+0

謝謝,這很好地解釋了這個問題。如果這是插入操作的工作方式,那麼這是否意味着你永遠不能使用該操作在列表的最終位置插入一個元素?反而簡單地將列表拼接在一起是最簡單的方法嗎?即:[1,2,3,4] + [5]得到[1,2,3,4,5],從而將元素2插入列表的末尾? – leob

+0

很高興幫助。要最後插入元素,可以使用'list.insert(len(list),element)'。例如,它將是'a = [1,2,3,4]',然後是'a.insert(len(a),5)'。或者簡單地說'a.append(5)'可以完成同樣的工作。 – skjoshi