numaralı telefon çağrısını kullanır. Bu nedenle, for döngüsünde yığınlanmış bazı filtrelerden bazı ilginç davranışlar alıyorum. Ben bir gösteri ile başlayacağız: Yığınlanmış filtrenin tek davranışı()
>>> x = range(100)
>>> x = filter(lambda n: n % 2 == 0, x)
>>> x = filter(lambda n: n % 3 == 0, x)
>>> list(x)
[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]
Burada beklenen çıkışı olsun. Filtrede bir filtre içinde bir aralığa sahibiz ve filtre koşulları istediğimiz gibi istifliyor. Şimdi benim sorunum geliyor.
Bir sayının göreli ilkelerini hesaplamak için bir işlev yazdım. Bu şuna benzer: her ne nedenle
def relative_primes(num):
'''Returns a list of relative primes, relative to the given number.'''
if num == 1:
return []
elif is_prime(num):
return list(range(1, num))
result = range(1, num)
for factor in prime_factors(num):
# Why aren't these filters stacking properly?
result = filter(lambda n: n % factor != 0, result)
return list(result)
, filtre yalnızca prime_factors elde listesinde() içinde SON faktörüne uygulanıyor. Örnek:
>>> prime_factors(30)
[2, 3, 5]
>>> relative_primes(30)
[1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29]
Biz 2 ya da 3 hiçbir katları listesinden çıkarıldı görebiliriz. Bu neden oluyor? Yukarıdaki örnek neden çalışıyor, ancak for döngüsündeki filtreler yok mu?
Bir başka öznitelik seçeneği 'itiraf etmeliyiz ki, bu kod biraz daha az okunabilir hale getirir. –