> 백엔드 개발 > 파이썬 튜토리얼 > 목록에서 zip() 함수로 Python을 파생시키는 다섯 가지 기술

목록에서 zip() 함수로 Python을 파생시키는 다섯 가지 기술

爱喝马黛茶的安东尼
풀어 주다: 2019-10-25 17:56:00
앞으로
2543명이 탐색했습니다.

목록에서 zip() 함수로 Python을 파생시키는 다섯 가지 기술

이 글에서 저자는 5가지 방법을 소개합니다. 입문 단계에서는 잘 알지 못할 수도 있지만, 이 5가지 스킬은 실제 전투에서 매우 실용적입니다.

문자열 연산

문자열은 본질적으로 튜플이지만 문자열에는 많은 "연산"이 있습니다. 가장 직관적인 것은 문자열의 + 및 * 연산으로 각각 반복과 연결을 나타냅니다.

>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!
>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python
로그인 후 복사

또한 역방향 문자열을 얻으려면 [::-1]을 사용하여 직접 색인을 생성할 수도 있습니다.

>>> print(my_string[::-1])
!..muideM iH>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]
로그인 후 복사

목록 요소가 모두 문자열인 경우에는 Join() 메서드를 빠르게 사용할 수 있습니다. 모든 요소를 ​​연결하려면 함께 연결:

>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!
로그인 후 복사

위와 같이 .join() 메서드를 사용하여 목록 요소를 연결합니다. 여기서 『 』는 연결 방법이 공백임을 나타냅니다. 실제로 자연어 처리에서는 이 방법을 자주 사용합니다. 예를 들어 문장을 문자로 분할하면 후처리 병합에서는 Join()을 사용해야 합니다.

관련 추천: "Basic Python Tutorial"

List comprehensions

아직 List comprehension 사용법을 모른다면 빨리 배워보세요. 이 글의 저자가 말했듯이, "처음 이 방법을 배웠을 때, 내 세상은 완전히 바뀌었습니다." 목록 이해력은 정말 강력합니다. 일반 방법보다 빠를 뿐만 아니라, 가독성도 매우 뛰어납니다. 목록을 반복하고 일부 계산을 수행하려면 이를 사용하십시오.

변수를 제곱하고 5를 더하는 간단한 함수를 정의하는 것으로 시작합니다.

>>> def stupid_func(x):
>>>     return x**2 + 5
로그인 후 복사

리스트 이해력을 사용하지 않고 이 함수를 목록의 홀수 항목에 적용하려면 일반적으로 다음 형식으로 작성합니다. :... 일부 부울 조건문의 경우 위 구문은 [조건부 목록의 항목에 대한 표현식]으로 수정될 수 있습니다. 그 구조는 실제로 다음과 같습니다.

>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>>     if x % 2 != 0:
>>>         new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]
로그인 후 복사

위 목록 이해는 더욱 단순화될 수 있습니다. 즉, 새 함수를 정의할 필요가 없습니다.

>>> my_list = [1, 2, 3, 4, 5]
>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]
로그인 후 복사

Lambda 및 Map

Lambda는 조금 이상해 보일 수 있는 익명 함수이지만 일단 이해하고 나면 매우 직관적이고 강력해집니다. 일반적으로 Lambda 함수는 상대적으로 작으며 함수 이름을 정의할 필요가 없습니다. 그렇다면 익명 함수가 필요한 이유는 무엇입니까? 간단히 말해서 Lambda는 몇 가지 직관적인 작업을 수행하는 경우가 가장 많으며 표준 함수 정의가 필요하지 않으며 다시 호출하기 위해 새 함수 이름이 필요하지 않습니다.

위의 제곱에 5를 더한 예를 들어보겠습니다. 이전에 표준 함수인 def dumb_func(x)를 정의했다면 이제 Lambda 익명 함수를 사용해 볼 수 있습니다.

>>> for item in list:
>>>     if conditional:
>>>         expression
로그인 후 복사

그렇다면 위의 표현식을 사용하는 이유는 무엇일까요? 그 이유 중 가장 큰 부분은 간단한 작업을 수행하려는 경우 실제 함수를 정의하지 않고도 수행할 수 있기 때문입니다. 예를 들어 목록 요소를 정렬하려면 sorted() 메서드를 사용하는 것이 직관적인 방법입니다.

>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]
로그인 후 복사

이 방법은 기본적으로 큰 것에서 작은 것, 작은 것에서 큰 것까지만 정렬할 수 있지만 Lambda 표현식의 도움으로 구현할 수 있습니다. 더 많은 무료 정렬 기준. 아래 표시된 대로 우리는 가장 작은 제곱수에 따라 목록을 정렬하려고 합니다. 이는 정렬 방법을 sorted() 메서드에 알려주는 Lambda 함수를 사용하여 정의할 수 있습니다.

>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]
로그인 후 복사

Map은 목록과 같은 다른 시퀀스 요소에 함수를 적용하는 간단한 함수입니다. 두 개의 목록이 있고 두 목록의 해당 요소를 곱하려면 람다 함수와 맵을 사용하여 이 기능을 빠르게 달성할 수 있습니다.

>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]
로그인 후 복사

위 코드는 둘 다 사용하지 않으면 매우 우아합니다. , 일반적으로 표현식은 다음과 같이 작성해야 합니다.

>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]
로그인 후 복사

한 줄 조건문

조건문을 사용하는 경우 다음과 같이 작성될 가능성이 가장 높습니다.

>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]
로그인 후 복사
그러나 실제로는 다음과 같이 작성할 수 있습니다. 또한 인쇄 함수에 모든 조건을 작성합니다. 즉, 7줄 이상의 코드는 다음 줄과 동일하게 작성할 수 있습니다.

>>> x, y = [1, 2, 3], [4, 5, 6]
>>> z = []
>>> for i in range(len(x)):
>>>     z.append(x[i] * y[i])
>>> print(z)
[4, 10, 18]
로그인 후 복사

이전에 작성한 코드를 보면 정말 간결해 보입니다. 이 표현으로 바꿀 수 있습니다.

zip()

앞서 map() 함수를 소개할 때 두 개의 병렬 리스트에 특정 함수를 적용하는 예를 들었는데, zip() 함수를 사용하면 더 간단하게 할 수 있습니다. 두 개의 목록이 있는 경우 첫 번째 목록에는 이름이 포함되고 두 번째 목록에는 성이 포함됩니다. zip() 함수를 사용하면 다음과 같이 이들을 하나로 연결할 수 있습니다.

>>> x = int(input())
>>> if x >= 10:
>>>     print("Horse")
>>> elif 1 < x < 10:
>>>     print("Duck")
>>> else:
>>>     print("Baguette")
로그인 후 복사

즉, zip은 두 개의 동일한 길이 목록을 일대일 쌍으로 변환합니다. 즉, (("Peter", "Jensen"), ("Christian", "Smith"), ("Klaus", " 니스트럽")).

위 내용은 목록에서 zip() 함수로 Python을 파생시키는 다섯 가지 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jianshu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿