2016-08-14 2 views
1

Ich habe gerade angefangen zu lernen, wie man mit Python programmiert, und habe einige Übungen gemacht, um mich zu verbessern. Für eine der Übungen muss ich ein Sieb von Eratosthenes programmieren und dabei wollte ich eine Liste mit den Zahlen 1 bis n erstellen.Python: Generieren Liste der Zahlen 1-10, aber 1 endet am Ende der Liste?

Mein Code ist wie folgt:

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 

Dies ist so weit ich habe, denn als ich getestet, was ich mit bisher geschrieben hatte:

die Liste
print(primelist(10)) 

meinen Code-Ausgang [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 1] und ich kann nicht herausfinden, warum es so ist. Jede Erklärung würde sehr geschätzt werden!

+0

Das Hinzufügen des 'python' Tags zu Ihrer Frage wird es Ihnen erleichtern, eine schnelle Antwort zu erhalten. – atayenel

Antwort

0

Ich weiß nicht, warum es rückwärts ist, aber Ihr Code ist nicht die Art, Elemente zu einer Liste hinzuzufügen. Auch verwenden Sie nicht die Variable n in Ihrem Code (wahrscheinlich ein Tippfehler), so werde ich nur die Funktion hinzufügen, um eine Liste über 1 bis n zu generieren.

def primelist(n): 
    grid=[] 
    for k in range(1,n+1): 
     grid.append(k) 
    return grid 

Dieser Code wird [1,2,3,4,5,6,7,8,9,10] zurückkehren, wie Sie verlangten.

+0

Ja, das war ein Tippfehler, tut mir leid. Danke, das macht viel mehr Sinn! – leob

+0

@leob nachdem Sie es versucht haben, können Sie es als richtige Antwort akzeptieren, was sowohl für Sie als auch für mich von Vorteil ist. – atayenel

3

In Python fügt list.insert(index, item) tatsächlich item BEFORE index.

Also list.insert(-1, k) Inserts k vor -1. Daher deine Ergebnisse.

zu tun, was Sie richtig machen wollen, sind die folgenden zwei Zeilen sind äquivalent

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

Beide Methoden, um die aktuelle Liste ändern (anstatt eine neue Liste der Rückkehr), wie erwartet.

Sehen Sie hier mehr: https://mail.python.org/pipermail/tutor/2010-January/073754.html

0

xrange dies für Sie tun können, denken Sie daran xrange einen Endwert zu geben, die eine mehr als die ist, die Sie wollen.

So Zahlen zu erzeugen, die von 1 bis n: xrange (1, n + 1)

Das folgende Beispiel wird Ihnen eine Liste von 1 bis 10.

>>> primelist=list(xrange(1,11)) 
>>> primelist 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
1

insert Verfahren zur Liste Einsätze das Element am Index vor dem ersten Argument. -1 ist der Index des letzten Elements. Wenn Sie also bei -1 einfügen, fügen Sie immer vor dem letzten Element ein. Zum Beispiel haben Sie eine Liste a wie:

a = [1,2,3,4] 
print a[-1] # It will print 4 

Also, wenn Sie die erste Element einzufügen versuchen (1) in der Liste mit grid.insert(-1, k), es (oder ersten, wie es nur Element sein) zu halten geht, wie es kein anderes Element gibt. Alle Einfügeoperationen nach dem ersten Element fügen die Elemente an der zweitletzten Position in der Liste hinzu.

Dies führt Sie sehen nur 1 auf der letzten Position, während alle anderen Elemente in der Reihenfolge sind, wie Sie erwarten.

Wie bereits von @coln erwähnt, können Sie entweder list.append(k) oder list.insert(len(list), k) verwenden, um Elemente am Ende der Liste einzufügen/anzufügen/hinzuzufügen.

+0

Danke, das erklärt das Problem gut. Wenn die Einfügeoperation so funktioniert, bedeutet das, dass Sie diese Operation nicht verwenden können, um ein Element an der endgültigen Position einer Liste einzufügen? Ist das der einfachste Weg, dies einfach zu erreichen, um Listen zusammen zu splitten? dh zu sagen: [1, 2, 3, 4] + [5] um [1, 2, 3, 4, 5] zu bekommen und so das Element 2 am Ende der Liste einzufügen? – leob

+0

Froh, dass es geholfen hat. Um das Element zuletzt einzufügen, können Sie 'list.insert (len (list), element)' verwenden. In Ihrem Beispiel ist es a = [1,2,3,4] 'und dann' a.insert (len (a), 5) '. Oder einfach "a.append (5)" hätte den gleichen Job gemacht. – skjoshi

Verwandte Themen