2017-10-16 2 views
1

Bei einer Liste lst = [121, 4, 37, 441, 7, 16] möchte ich alle Zahlen entfernen, die sich wiederholen, was zu einer neuen Zeichenkette führt, die lst = [37,7] (die Primzahlen der ursprünglichen Zeichenkette) wäre.Primzahlen aus einer Liste holen

Bisher habe ich es geschaffen, nur diesen Code löscht:

def func(lst,x): 
    y = [] 
    for i in lst: 
     for x in range (1, i): 
      if (i % x) == 0 : 
       y.append(i) 
    return y 

print(func(lst,3)) 

Statt lst = [37,7] zu bekommen, ich bin diese komisch aussehende Liste bekommen:

[121, 121, 4, 4, 37, 441, 441, 441, 441, 441, 441, 441, 441, 7, 16, 16, 16, 16] 

Gibt es eine Möglichkeit, Kann das funktionieren?

+0

'121% 1 == 0 'ist natürlich wahr, ebenso wie' 121% 11 == 0'. Ihr Code wiederholt jede Zahl "k" mal, wobei "k" die Anzahl der richtigen Teiler (einschließlich "1") ist. Da dies Hausaufgaben zu sein scheinen, lasse ich dich rätseln, wie man es repariert. –

+1

Ich verstehe nicht? Sie möchten alle Nicht-Primzahlen entfernen? –

+0

Danke John Coleman, ich werde es sicher tun! – Marujo92

Antwort

2

Da es sich wie eine Hausaufgabenfrage anfühlt, gebe ich keinen Arbeitscode, sondern eine Strategie. Sie möchten sicherstellen, dass nur die Nummern der ursprünglichen Liste erhalten bleiben, oder die Zahlen herausfiltern, die nicht prim sind.

Etwas formeller, "für jede Nummer in der Liste bestimmen, ob es Prime ist, und wenn ja, fügen Sie es in eine neue Liste".

Ihr Code ist 90% dort, aber Ihr Kernel (der Primalitätstest) ist nicht korrekt. Der Schlüssel zum Testen der Primalität besteht darin, sicherzustellen, dass jeder mögliche Ganzzahldivisor die betreffende Zahl gleichmäßig teilt.

Wenn beispielsweise Test 6, die Liste der möglichen „0 Rest“ integer Divisoren ist

[1, 2, 3, 4, 5, 6] 

Die ersten und letzten Ziffern (1 und 6) bedeuten nicht alles so weit wie primality (6/1 ist 6 und 6/6 ist 1). Also, Ihre Liste der möglichen Teilern zu Test jetzt ist

[2, 3, 4, 5] 

Von hier, denke ich einen Einblick Sie in Ihrem Code fehlt sind, ist, dass für eine Zahl prim ist, alle seiner möglichen Teilern müssen keine gerade Zahl erzeugen (dh Rest von 0).

+2

Das ist toll, danke Hunteke. Wollte die Lösung sowieso nicht, sonst lerne ich nicht! Ich werde hier den richtigen Code veröffentlichen, sobald ich es gefunden habe! – Marujo92

Verwandte Themen