Verstehen Sie die Verwendung von Filtern in einem Artikel

Tomorin
Freigeben: 2018-08-17 14:47:48
Original
2554 Leute haben es durchsucht

Die in

Python integrierte Funktion filter() wird zum Filtern von Sequenzen verwendet.

Ähnlich wie map() akzeptiert auch filter() eine Funktion und eine Sequenz. Anders als map() wendet filter() die übergebene Funktion der Reihe nach auf jedes Element an und entscheidet dann, ob das Element beibehalten oder verworfen werden soll, basierend darauf, ob der Rückgabewert True oder ist FALSCH.

Um beispielsweise in einer Liste gerade Zahlen zu löschen und nur ungerade Zahlen beizubehalten, können Sie so schreiben:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
Nach dem Login kopieren

Um leere Zeichenfolgen in einer Sequenz zu löschen, können Sie so schreiben:

def not_empty(s):
    return s and s.strip()
    
list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
# 结果: ['A', 'B', 'C']
Nach dem Login kopieren

Es ist ersichtlich, dass der Schlüssel zur Verwendung der höherwertigen Funktion filter() darin besteht, eine „Filter“-Funktion korrekt zu implementieren.

Beachten Sie, dass die Funktion filter() einen Iterator zurückgibt, was eine Lazy-Sequenz ist, daher müssen wir filter() erzwingen Vervollständigen Sie die Berechnung. Als Ergebnis müssen Sie die Funktion list() verwenden, um alle Ergebnisse zu erhalten und list zurückzugeben.

Verwenden Sie Filter, um Primzahlen zu finden

Eine Möglichkeit, Primzahlen zu berechnen, ist die Ehrlich-Sieb-Methode. Ihr Algorithmus ist sehr einfach zu verstehen:

Listen Sie zunächst alle natürlichen Zahlen beginnend bei 2 auf und konstruieren Sie eine Folge:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 , 14, 15, 16, 17, 18, 19, 20, ...

Nehmen Sie die erste Zahl 2 in der Folge, die eine Primzahl sein muss, und verwenden Sie dann 2, um die Vielfachen von herauszufiltern 2 in der Reihenfolge:

3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16, 17,18, 19,20, ...

Neu erhalten Die erste Zahl in der Folge ist 3, die eine Primzahl sein muss. Verwenden Sie dann 3, um die Vielfachen von 3 in der Folge herauszufiltern:

5,6, 7, 8,9,10, 11,12, 13,14, 15,16, 17,18, 19,20, ...

Nehmen Sie die erste Zahl 5 der neuen Folge und verwenden Sie dann 5 bis Filtern Sie die Vielfachen von 5 in der Reihenfolge heraus:

7,8,9,10, 11,12, 13,14,15,16, 17,18, 19,20, ...

Durch kontinuierliches Sieben erhalten Sie alle Primzahlen.

Um diesen Algorithmus in Python zu implementieren, können Sie zunächst eine ungerade Sequenz beginnend mit 3 konstruieren:

def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n
Nach dem Login kopieren

Beachten Sie, dass dies ein Generator und eine unendliche Sequenz ist.

Dann definieren Sie eine Filterfunktion:

def _not_divisible(n):
    return lambda x: x % n > 0
Nach dem Login kopieren

Abschließend definieren Sie einen Generator, der kontinuierlich die nächste Primzahl zurückgibt:

def primes():  
  yield 2   
  it = _odd_iter() # 初始序列   
  while True:    
     n = next(it) # 返回序列的第一个数      
     yield n      
     it = filter(_not_divisible(n), it) # 构造新序列
Nach dem Login kopieren

Dieser Generator gibt zuerst die erste Primzahl 2 zurück, dann Verwenden Sie filter(), um kontinuierlich neue gefilterte Sequenzen zu generieren.

Da primes() auch eine unendliche Folge ist, müssen Sie beim Aufruf eine Bedingung festlegen, um die Schleife zu verlassen:

# 打印1000以内的素数:
for n in primes():   
   if n < 1000:
        print(n)   
   else:       
          break
Nach dem Login kopieren

Beachten Sie, dass Iterator eine Folge verzögerter Berechnungen ist, die wir verwenden können Python drückt „alle natürlichen Zahlen“, „alle Primzahlen“ und andere Folgen aus, und der Code ist sehr prägnant

Das obige ist der detaillierte Inhalt vonVerstehen Sie die Verwendung von Filtern in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage