Understand the use of filters in one article

Tomorin
Release: 2018-08-17 14:47:48
Original
2497 people have browsed it

PythonThe built-infilter()function is used to filter sequences.

Similar tomap(),filter()also accepts a function and a sequence. Different frommap(),filter()applies the passed function to each element in turn, and then decides whether to keep or discard the element based on whether the return value is True or False.

For example, in a list, to delete even numbers and keep only odd numbers, you can write like this:

def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15]
Copy after login

To delete empty strings in a sequence, you can write like this:

def not_empty(s): return s and s.strip() list(filter(not_empty, ['A', '', 'B', None, 'C', ' '])) # 结果: ['A', 'B', 'C']
Copy after login

It can be seen that the key to using the high-order functionfilter()is to correctly implement a "filtering" function.

Note that thefilter()function returns anIterator, which is a lazy sequence, sofilter()must be forced to complete the calculation As a result, you need to use thelist()function to obtain all results and returnlist.

Use filter to find prime numbers

One way to calculate prime numbers is the Ehrlich sieve method. Its algorithm is very simple to understand:

First, list all natural numbers starting from 2 and construct a sequence:

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

Take the first number 2 of the sequence, which must be a prime number, and then use 2 to filter out the multiples of 2 in the sequence:

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

Get new The first number in the sequence is 3, which must be a prime number. Then use 3 to filter out the multiples of 3 in the sequence:

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

Take the first number 5 of the new sequence, and then use 5 to filter out the multiples of 5 in the sequence:

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

If you continue to sift, you can get all the prime numbers.

To implement this algorithm in Python, you can first construct an odd sequence starting from 3:

def _odd_iter(): n = 1 while True: n = n + 2 yield n
Copy after login

Note that this is a generator and an infinite sequence.

Then define a filtering function:

def _not_divisible(n): return lambda x: x % n > 0
Copy after login

Finally, define a generator to continuously return the next prime number:

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

This generator first returns the first prime number 2, Then, use filter() to continuously generate new filtered sequences.

Since primes() is also an infinite sequence, you need to set a condition for exiting the loop when calling:

# 打印1000以内的素数: for n in primes(): if n < 1000: print(n) else: break
Copy after login

Note that Iterator is a sequence of lazy calculations, so we can use Python to express "all Natural numbers", "all prime numbers" and other sequences, and the code is very concise

The above is the detailed content of Understand the use of filters in one article. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!