파이썬 추론의 가장 포괄적 인 사용법

머리말

이 기사의 글과 사진은 인터넷에서 가져온 것으로 학습 및 커뮤니케이션 목적으로 만 사용되며 상업적인 용도는 없습니다. 문의 사항이있는 경우 처리를 위해 당사에 문의하시기 바랍니다.

추신 : Python 학습 자료가 필요한 경우 아래 링크를 클릭하여 직접 얻을 수 있습니다.

Python 무료 학습 자료 및 그룹 커뮤니케이션 답변 가입하려면 클릭하세요


1. 파이 소닉-매우 파이톤

1에서 100 사이의 숫자 제곱 목록을 생성하는 코드를 작성하십시오. 답은 다음과 같습니다.

1,4,9,16...

이렇게 작성하면 Pythonic이되지 않습니다.

nums = []
for i in range(1,101):
    nums.append(i*i)
print(nums)

올바른 작성 방법은 Python의 추론을 사용하는 것입니다.

nums = [i*i for i in range(1,101)]

2. 조건부 유도

3의 배수 인 1과 100 사이의 숫자를 포함하는 목록을 생성하는 방법입니다.

9,36,81...

암호:

nums = [i*i for i in range(1,101) if i%3==0]

3. 조건식

목록을 생성하고, 3의 배수이면 사각형을 사용하고 그렇지 않으면 숫자 자체를 사용합니다.

1,2,9,4,5,36...

암호:

nums = [i*i if i%3==0 else i for i in range(1,101)]

위의 세 가지 예를 결합하여 추론 된 요약을 살펴 보겠습니다.

  • 추론 공식은 열거 가능한 데이터 (목록, 튜플, 집합, 사전 등)에서 목록을 파생합니다. 생성자, 집합 또는 사전을 파생하는 것도 가능합니다.
  • 유도 공식은 유도 조건을 추가 할 수 있으며 조건을 충족하는 요소 만 유도 할 수 있습니다.
  • 파생 될 요소는 표현식을 사용하여 생성되며 if else를 사용하여 다른 요소를 생성 할 수 있습니다.
[表达式 if 表达式条件 else 分支 for i in 序列 if 推导条件]

4. 기능 사용

파생 조건이나 표현이 특히 복잡하면 어떻게됩니까? 기능을 사용할 수 있습니다.

1-100 사이의 모든 소수 : 2, 3, 5, 7 ...

def is_prime(num):
    if num == 1:
        return False  
    for i in range(2,num):
       if (num % i) == 0:
           return False
    else:
       return True

p_nums = [i for i in range(1,100) if is_prime(i)]
print(p_nums)

추론 된 조건을 함수에 넣으면 복잡한 조건을 처리 할 수있을뿐만 아니라 간결한 추론 표기법을 사용할 수도 있습니다.

마찬가지로 파생 결과를 생성하는 과정이 복잡하다면 함수에 논리를 넣을 수도 있습니다.

1900 년에서 2021 년 사이의 모든 연도를 도출하고 윤년을 표시하고 결과를 생성합니다.

1900, 1901, 1902, 1903, '闰1904'

암호:

def is_run(year):
    if (year % 4) == 0:
       if (year % 100) == 0:
           if (year % 400) == 0:
               return True   # 整百年能被400整除的是闰年
           else:
               return False
       else:
           return True       # 非整百年能被4整除的为闰年
    else:
       return False 

ryears = [f'闰{y}' if is_run(y) else y for y in range(1900, 2021)]    
print(ryears)

5. 중첩 된 표현식-권장되지 않음

2000 년부터 2021 년까지 매월 생성 : '2000 : January', '2000 : February', '2020 : March', ..., '2021 : December'

monthes = [f'{y}年:{m}月' for y in range(2000, 2022) for m in range(1,13) ]

다음과 유사한 두 개의 for 루프가 있습니다.

monthes = []
for y in range(2000, 2022):
    for m in range(1,13):
        monthes.append(f'{y}年:{m}月')

6. 거대한 목록을 도출하십시오. 이러지 마십시오!

1에서 100 억 사이의 숫자의 제곱을 구하면 코드는 다음과 같습니다.

nums = [i*i for i in range(1,10000000000)]

그러나이 코드는 컴퓨터가 슈퍼 컴퓨터가 아니라면 컴퓨터를 정지시킬 가능성이 있습니다. 메모리에서 100 억 개의 계산을 수행하고이 100 억 개의 숫자를 저장해야하기 때문입니다.

7. 발전기 사용

이 경우 추론 생성기를 사용해야합니다. 사용법은 매우 간단합니다.

  • 대괄호를 괄호로 변경하십시오.
nums = (i*i for i in range(1,10000000000))
print(nums)
print(next(nums))
print(next(nums))
print(next(nums))

출력은 생성기입니다.

<generator object <genexpr> at 0x7fa0b422feb0>
1
4
9

이것은 생성기입니다. 한 번에 100 억 개의 숫자를 생성하지 않습니다. next ()가 호출 될 때만 새 것을 생성하여 반환합니다. 즉, 동시에 하나의 번호 만 저장됩니다.

8. 사전 파생

사전을 파생하는 방법은 다음을 제외하고 목록의 방법과 매우 유사합니다.

  • 중괄호 사용
  • 키-값 쌍을
    사용하여 숫자와 숫자 제곱으로 구성된 사전 파생하면 결과는 다음과 같습니다.
{1: 1, 2: 4, 3: 9, ..., 100: 10000}

암호:

nums_dict = {n:n*n for n in range(1,101)}
print(nums_dict)

반대로 사각형은 앞쪽에 있고 숫자는 뒤쪽에 있습니다.

nums_dict = {n*n:n for n in range(1,101)}
print(nums_dict)

점수별로 다음 사전을 정렬합니다.

{'麦叔':59, '张三':87, 'FGA':78, '石石':100, '莫名':90}

결과 정렬 :

{'石石': 100, '莫名': 90, '张三': 87, 'FGA': 78, '麦叔': 59}

암호:

scores = {'麦叔':59, '张三':87, 'FGA':78, '石石':100, '莫名':90}
sored_scores = {item[0]:item[1] for item in sorted(scores.items(), key=lambda item:item[1], reverse=True)}
print(sored_scores)

1. 먼저 사전 점수를 튜플 목록으로 바꿉니다. scores.items ()
2. sorted 함수를 사용하여 튜플 목록을 정렬합니다. sorted (scores.items (), key = lambda item : item [1], reverse = True)
3. 정렬 프로세스에서 람다를 사용하여 정렬 할 튜플의 두 번째 열을 지정합니다. key = lambda item : item [1]. 기본값은 첫 번째 열입니다.
4. 역순을 지정합니다. 즉, 더 높은 점수가 앞쪽에 있습니다. reverse = True
5. 추론을 사용하여 정렬 된 튜플 목록을 생성하여 새 정렬 된 사전을 생성합니다. {item [0] : item [1] ...}의 항목

9. 파생 세트

집합을 파생하는 방법은 목록과 동일하지만 차이점은 다음과 같습니다.

1. 사전 파생과 유사하게 중괄호를 사용하지만 키-값 쌍이 아닌 단일 요소입니다.
2. 컬렉션은 중복 요소를 자동으로 필터링합니다.
다음 이름 목록은 선행 및 후행 공백을 제거한 후 중복 된 이름을 제거합니다.

[ '麦叔', '张三', ' 麦叔 ', 'FGA ', '张小三', 'FGA', '石石',' 莫名','莫名' ]

파생 결과 :

{'石石', 'FGA', '张小三', '莫名', '张三', '麦叔'}

암호:

names = [ '麦叔', '张三', ' 麦叔 ', 'FGA ', '张小三', 'FGA', '石石',' 莫名','莫名' ]
new_names = {n.strip() for n in names}
print(new_names)

추천

출처blog.csdn.net/pythonxuexi123/article/details/112846507