>백엔드 개발 >파이썬 튜토리얼 >당신이 모를 수도 있는 30가지 Python 언어 기능과 요령

당신이 모를 수도 있는 30가지 Python 언어 기능과 요령

高洛峰
高洛峰원래의
2016-10-19 11:38:001102검색

저는 Python을 배우기 시작할 때부터 자주 사용하는 "트릭" 목록을 유지하기로 결정했습니다. "멋지네요!"라고 생각하게 만드는 코드를 볼 때마다(예: StackOverflow, 오픈 소스 소프트웨어 등에서) 이해할 때까지 시도한 다음 목록에 추가합니다. . 이 게시물은 정리된 목록의 일부입니다. 숙련된 Python 프로그래머라면 이미 알고 있는 내용도 있지만 모르는 내용을 발견할 수도 있습니다. Python을 배우고 있거나 프로그래밍을 이제 막 배우기 시작한 C, C++ 또는 Java 프로그래머라면 나처럼 이들 중 많은 것이 매우 유용하다는 것을 알게 될 것입니다.

각각의 트릭이나 언어적 특징은 과도한 설명 없이 예시로만 확인할 수 있습니다. 예제를 명확하게 설명하려고 노력했지만 익숙함에 따라 일부 예제는 여전히 약간 복잡해 보일 수 있습니다. 따라서 예를 살펴본 후 확실하지 않은 경우 제목은 Google을 통해 자세한 내용을 얻을 수 있도록 충분한 정보를 제공할 수 있습니다.

목록은 난이도별로 정렬되어 있으며 일반적으로 사용되는 언어 기능과 기술이 앞에 있습니다.

1.30 최대 및 최소 요소(heapq.nlargest 및 heapq.nsmallest)

>>> a = [random.randint(0, 100) for __ in xrange(100)]

>>> heapq.nlargest(5, a)

[3, 3, 5, 6, 8]

>>> heapq.nlargest(5, a)

[100, 100, 99, 98, 98]

1.31 직교 곱(itertools.product)

>>> itertools.product([1, 2)의 p에 대한 , 3], [4, 5]):

(1, 4)

(1, 5)

(2, 4)

(2, 5)

(3, 4)

(3, 5)

>>> for p in itertools.product([0, 1], 반복 =4):

... print ''.join(str(x) for x in p)

...

0000

0001

0010

0011

0100 0

1001

1010

1011

1100

1101

1110

1111 🎜>

1.32 조합 및 조합 대체(itertools.combinations 및 itertools.combinations_with_replacement)

>> > for c in itertools.combinations([1, 2, 3, 4, 5], 3) :

... print ''.join(str(x) for x in c)

...

123

124

125

134

135

145

234

235

245

345

>>> in itertools.combinations_with_replacement([1, 2, 3], 2):

... print ''.join(str(x) for x in c)

...

11

12

13

22

23

33

1.33 정렬(itertools.permutations)

>>> for p in itertools.permutations([1, 2, 3, 4]):

... print ''.join(str(x) for x in p)

.. .

1234

1243

1324

1342

1423

1432

2134

2143

2314

2341 🎜>

2413

2431

3124

3142

3214

3241

3412

3421

4123

4132

4213

4231

4312

4321

1.34 링크 반복(itertools.chain)

>>> a = [1, 2, 3, 4]

>>> for p in itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):

... print p

...

(1, 2)

(1, 3)

(1, 4)

(2, 3 )

(2, 4)

(3 , 4)

(1, 2, 3)

(1, 2, 4)

(1, 3, 4)

(2, 3, 4)

>>> ) 범위 내 n(len(a) + 1))

... 인쇄 하위 집합

...

()

(1 ,)

(2,)

(3 ,)

(4,)

(1, 2)

( 1, 3)

(1, 4)

(2, 3)

(2, 4)

(3, 4)

(1, 2, 3)

(1, 2, 4)

(1, 3, 4)

(2, 3, 4)

(1, 2, 3, 4)

1.35 주어진 값으로 행 그룹화(itertools.groupby)

>>> 연산자 가져오기 itemgetter

>>> import itertools

>>> open(' contactlenses.csv', 'r')을 infile로 사용:

... data = [line.strip().split (',') infile 행]

...

>>> data = data[1:]

>>> def print_data(rows):

... print 'n'.join('t' .join('{: ...

>>> print_data(데이터)

젊은               근시                   아니요                      감소                 없음  

젊은               근시      없음  감소됨                 없음  

젊은               근시                   예                     보통                  어려움  

젊은               하이퍼메트로프            아니요 감소됨                 없음  

젊은               하이퍼메트로프            아니요                      보통                  부드러운  

젊은              하이퍼메트로프            예                     감소                 없음  

젊은               하이퍼메트로프            예                    정상                  단단함  

노안 전      근시                   아니요                      감소                 없음  

노안 전      근시                   아니요                      정상                  약한  

노안 전      근시                  네                     감소됨                 없음  

노안 전      근시                   예                     정상                 심함  

노안 전      원시 원시            아니요                      감소                 없음

노안 전      원시 원시            아니요                      정상                  부드러운  

노안 전      원시 원시           네                     감소됨                 없음  

노안 전      고근시            예                     정상                 없음  

노안          근시                   없음                      감소                 없음

노안          근시                   아니요                    정상                  없음  

노안          근시                   예                     감소                 없음  

노안          근시                  예                     정상                  단단한  

노안          초근시            아니요                      감소                없음  

노안          초근시            아니요                    정상                  연성  

노안         하이퍼메트로프            예 감소됨                 없음  

노안          과시            예                     정상                  없음  

 

>>> data.sort(key=itemgetter(-1))  

>>> for itertools.groupby(data,lambdar:r[-1])의 값, 그룹:  

...     '------------' 

을 인쇄합니다. ..     print '그룹:' + 값  

...     print_data(group)  

...  

------------  

그룹: 딱딱함  

젊음               근시                   예                   보통                  힘든  

젊음              하이퍼메트로프            예                     정상                단단함  

노안 전      근시                 예                  정상                  단단함  

노안          근시 네                     보통                  힘들다  

----------  

그룹: 없음  

젊음               근시                  아니요                     감소                 없음  

젊은               근시                   예                     감소 없음  

젊은               하이퍼 메트로프            아니요                    감소                 없음  

젊은               하이퍼 메트로 감소 에드                 없음  

노안 전      근시                   예                     감소됨                 없음  

노안 전      hypermetrope            아니요                      감소                 없음  

노안 전      원시 원시            예                     감소                 없음  

노안 전      원시 원시            예                    정상                  없음  

노안          근시                   아니요                      감소                없음  

노안용          근시용                   없음                      정상                  없음  

노안          근시                   예                     감소                 없음  

노안          고근시           아니요 >    없음  

노안          초근시            예                     정상                  없음  

---- -------

그룹 : 소프트 젊은 myope 정상적인 소프트 없음

젊은 hypermetrope 정상적인 소프트 없음

사전 예비 마이프 정상 소프트 없음

노안 전      원시 원시            아니오                      정상                  부드러운  

노안          원시 원시           아니요                      보통                  부드러움 

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