2016-08-14 8 views
1

私はちょうどPythonを使ってプログラミングする方法を学び始めました。私は改善のためにいくつかの演習を行ってきました。演習の1つとして、私はEratosthenesのふるいをプログラムしなければなりません。その一環として、数字1〜nのリストを生成したいと思いました。Python:数字のリスト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 BEFORE indexを挿入します。

したがってlist.insert(-1, k)は、-1の前にkを挿入します。したがって、あなたの結果。あなたが適切にやってやりたい

は、次の2行は、予想通りどちらの方法は、(代わりに新しいリストを返すの)実際のリストを変更

list.insert(len(list), k) 
list.append(k) 

同等です。

は、ここで詳細を参照してください。https://mail.python.org/pipermail/tutor/2010-January/073754.html

0

はxrangeはxrangeのあなたが望むものよりも1以上で終了値を与えることを覚えて、あなたのためにこれを行うことができます。したがって、1からnまでの番号を生成する

:はxrange(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)を挿入しようとしているとき(それが唯一の要素であるように又は第一)そう、それが最後になり、他の要素がないためです。最初の要素の後のすべての挿入操作は、要素をリストの2番目の最後の位置に追加します。

これは最後の位置に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

関連する問題