>  기사  >  백엔드 개발  >  하나의 기사에서 필터 사용 이해

하나의 기사에서 필터 사용 이해

Tomorin
Tomorin원래의
2018-08-17 14:47:482512검색

Python내장된 filter() 함수는 시퀀스를 필터링하는 데 사용됩니다.

map()과 유사하게 filter()도 함수와 시퀀스를 받습니다. map()과의 차이점은 filter()는 전달된 함수를 각 요소에 차례로 적용한 다음 반환 값이 True인지 False인지에 따라 요소를 유지할지 삭제할지 결정한다는 것입니다.

예를 들어 목록에서 짝수를 삭제하고 홀수만 유지하려면 다음과 같이 쓸 수 있습니다.

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

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

순서에서 빈 문자열을 삭제하려면 다음과 같이 쓸 수 있습니다.

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

사용할 수 있는 filter()this 고차 함수의 경우 핵심은 "필터링" 기능을 올바르게 구현하는 것입니다.

filter() 함수는 게으른 시퀀스인 Iterator를 반환하므로 filter()가 계산 결과를 완료하도록 하려면 list() 함수를 사용하여 결과를 가져와야 합니다. 모든 결과를 확인하고 목록을 반환합니다.

필터를 사용하여 소수 찾기

소수를 계산하는 한 가지 방법은 Ehrlich 체법으로 이해하기 매우 쉽습니다.

먼저 2부터 시작하는 모든 자연수를 나열하고 수열을 구성합니다.

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

첫 번째 숫자를 구하세요. 시퀀스 2는 소수여야 하며 2를 사용하여 시퀀스에서 2의 배수를 필터링합니다:

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

새 수열의 첫 번째 숫자 3(소수여야 함)을 가져온 다음 3을 사용하여 수열에서 3의 배수를 필터링합니다. :

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

새 수열의 첫 번째 숫자 5를 취하고, 그런 다음 5를 사용하여 순서대로 5의 배수를 필터링합니다.

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

계속해서 체로 치면 모든 소수를 얻을 수 있습니다.

이 알고리즘을 Python에서 구현하려면 먼저 3부터 시작하는 홀수 시퀀스를 구성할 수 있습니다.

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

이것은 생성기이자 무한 시퀀스입니다.

그런 다음 필터링 함수를 정의합니다.

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

마지막으로 다음 소수를 연속적으로 반환하는 생성기를 정의합니다.

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

이 생성기는 먼저 첫 번째 소수 2를 반환한 다음 filter()를 사용하여 필터링된 새 숫자를 지속적으로 생성합니다. 순서.

prims()도 무한 시퀀스이므로 호출 시 루프를 종료하기 위한 조건을 설정해야 합니다.

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

Iterator는 게으른 계산 시퀀스이므로 Python을 사용하여 "모든 자연수"를 나타낼 수 있습니다. 그리고 "모든 소수"는 이 시퀀스와 같으며 코드는 매우 간결합니다

위 내용은 하나의 기사에서 필터 사용 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.