ho sudato su questo pezzo di codice - che restituisce tutti i numeri primi in una lista:Trovare Primes con modulo in Python
primes = range(2, 20)
for i in range(2, 8):
primes = filter(lambda x: x == i or x % i, primes)
print primes
Funziona ... ma io non capisco il ruolo " x == i or x % i
"suona nel complesso.
anche io non capisco perché il secondo intervallo è solo 2 a 7.
Ho anche creato un'implementazione di Python del crivello di Eratostene, nella speranza che mi possa dare una certa comprensione, ma non lo ha fatto.
Quando rimuovo la componente x % i
, mi sarei aspettato questo codice di darmi i numeri comuni a entrambi i set, ma non:
nums = [2, 20]
for i in range(2, 8):
nums = filter(lambda x: x == i, nums)
print nums
perché è questo?
Allo stesso modo, quando rimuovo la componente x == i
, restituisce i numeri primi da 11 a 19.
nums = range(2, 20)
for i in range(2, 8):
nums = filter(lambda x: x % i, nums)
print nums
Anche in questo caso, non capisco il motivo per cui ignora tutti i primi sotto 11.
Successivo , Ho provato questo:
nums = [13]
for i in range(2, 8):
nums = filter(lambda x: x % i, nums)
print nums
Ancora, questo non ha senso per me. Il lambda sta iterando su x
in nums
corretto? E i
sta iterando nell'intervallo da 2 a 7. Quindi, non stiamo prendendo 13 % i
... da 2 a 7? Come si traduce in "13"?
Utilizzando la stessa logica di immediatamente sopra, ho fatto la stessa cosa con "13", ma utilizzando x == i
nella lambda.
for i in range(2, 8):
nums = filter(lambda x: x == i, nums)
print nums
E come mi aspettavo, è restituito un elenco vuoto - che ha un senso nella mia mente, perché 13 non appare mai nel range di 2 a 7.
Per riferimento per chiunque cerchi di aiutare, questa è la mentalità sono in quando lavoro con filter()
e lambda:
a = range (1, 11)
b = range (9, 20)
for i in filter(lambda x: x in a, b):
print i,
questo, naturalmente, noi "9 10" dà. So che la struttura del loop è diversa, ma spero che ti aiuti a vedere dove si trova la mia confusione.
Ho lavorato con filter()
e lambda in modo un po 'estensivo, quindi ho pensato di poterlo capire, ma sono perplesso! Spero solo che la risposta non sia così ovvia e ovvia che mi sento un idiota ...
Dove hai preso quel frammento di originale? È piuttosto brutto. Non guarderei ad esso come un esempio di come trovare i numeri primi in una lista. – dursk
L'ho trovato su Stack Overflow da qualche parte. Voglio solo scoprire come funziona. – fra
'x == i o x% i' equivale a dire' x% i == 0 e x! = I'. Quando 'x == i',' x% i' non sarà mai zero. – dursk