>  기사  >  백엔드 개발  >  Python 언어의 꼭 봐야 할 기능과 기술 30가지(2)

Python 언어의 꼭 봐야 할 기능과 기술 30가지(2)

高洛峰
高洛峰원래의
2017-03-17 16:45:551008검색

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

각각의 트릭이나 언어 기능은 너무 많은 설명 없이 예제를 통해서만 확인할 수 있습니다. 예는 명확하지만 익숙함에 따라 일부는 여전히 복잡해 보일 수 있으므로 예를 살펴본 후에도 명확하지 않은 경우 제목을 통해 Google을 통해 자세한 정보를 얻을 수 있습니다.

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

1.15 단순 목록:

>>> [3, 4], [5, 6]]

>>>

목록(itertools.chain.from_iterable(a))

[1, 2, 3, 4, 5, 6]

>>> sum(a, [])

[ 1, 2, 3, 4, 5, 6]

>>> [x

for l in a for x in l]

[1, 2, 3, 4, 5, 6]

>>> a = [[[1, 2], [3, 4]] , [[5, 6], [7, 8]]]

>>> [x for l1 in a for l2 in l1 for x in l2]

[1 , 2, 3, 4, 5 , 6, 7, 8]

>>> a = [1, 2, [3, 4], [[5, 6], [7, 8] ]]

>>> flatten = 람다 x: [y for l in x for y in flatten(l)]

if type( x) is list else [x]

>>> flatten(a)

[1, 2, 3, 4, 5, 6, 7 , 8]

참고: Python 문서에 따르면 itertools.chain.from_iterable이 선호됩니다.

1.16

생성기표현식

>>> g = (x ** 2 for x in x

범위 (10))

>>

다음(g)

0

>>>

1

>>> 다음(g)

4

>>> 다음(g)

9

>>> sum(x ** 3 for x in xrange(10))

2025

>>> x ** 3 for x in xrange(10) if x % 3 == 1)

408

1.17 사전 반복

>>> x: x ** 2(5)}

>>>m

{0:0, 1:1, 2:4, 3:9, 4: 16}

>>> m = {x: 'A' + str(x) for x in range(10)}

> ;>>m

{0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5' , 6 : 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}

1.18 사전을 반복하여 사전을 뒤집습니다

>>> = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

>>>m

{'d': 4, 'a': 1, 'b': 2, 'c': 3}

>>> {v: k for k, v in m.items()}

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

1.19 명명된 시퀀스(collections.namedtuple)

> ; >> Point = collections.namedtuple('Point', ['x', 'y'])

>>> p = Point(x=1.0, y=2.0)

>>>p

포인트(x=1.0, y=2.0)

>>>p.x

1.0

>>> p.y

2.0

1.20

이름이 지정된 목록의 상속:

>>> class

Point(collections.namedtuple('PointBase', ['x', 'y'])): ... 슬롯 = ()

...     def add(self, other):  

...             return Point(x=self.x + other.x, y=self.y + other. y)  

...  

>>> p = 점(x=1.0, y=2.0)  

>>> q = 점(x=2.0, y=3.0)  

>>> p + q  

점(x=3.0, y=5.0) 

1.21   集合及集합操작

>>> A = {1, 2, 3, 3}  

>>> A  

세트([1, 2, 3])  

>>> B = {3, 4, 5, 6, 7}  

>>> B  

세트([3, 4, 5, 6, 7])  

>>> A | B  

set([1, 2, 3, 4, 5, 6, 7])  

>>> A & B  

세트([3])  

>>> A - B  

set([1, 2])  

>>> B - A  

세트([4, 5, 6, 7])  

>>> A ^ B  

set([1, 2, 4, 5, 6, 7])  

>>> (A ^ B) == ((A - B) | (B - A))  

참 

1.22   多중集及其操작(컬렉션.개수er )

>>> A = collections.Counter([1, 2, 2])  

>>> B = collections.Counter([2, 2, 3])  

>>> A  

카운터({2:2, 1:1})  

>>> B  

카운터({2:2, 3:1})  

>>> A | B  

카운터({2:2, 1:1, 3:1})  

>>> A & B  

카운터({2: 2})  

>>> A + B  

카운터({2:4, 1:1, 3:1})  

>>> A - B  

카운터({1: 1})  

>>> B - A  

카운터({3: 1}) 

1.23   迭代中最常见的元素 (collections.Counter)

>>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])  

>>> A  

카운터({3:4, 1:2, 2:2, 4:1, 5:1, 6:1, 7:1})  

>>> ; A.most_common(1)  

[(3, 4)]  

>>> A.most_common(3)  

[(3, 4), (1, 2), (2, 2)] 

1.24   双端队列 (컬렉션. 데크)

>>> Q = collections.deque()  

>>> Q.app종료(1)  

>>> Q.추가왼쪽(2)  

>>> Q.extend([3, 4])  

>>> Q.extendleft([5, 6])  

>>> Q  

deque([6, 5, 2, 1, 3, 4])  

>>> Q.pop()  

>>> Q.popleft()  

>>> Q  

deque([5, 2, 1, 3])  

>>> Q.rotate(3)  

>>> Q  

deque([2, 1, 3, 5])  

>>> Q.rotate(-3)  

>>> Q  

deque([5, 2, 1, 3]) 

1.25   有最大长島的双端队列 (collections.deque)

>>> last_ three = collections.deque(maxlen=3)  

>>> for i in xrange(10):  

...     last_ three.append(i)  

...     인쇄 ', '.join(str(x) for x의 마지막_3)  

...  

0, 1 

0, 1, 2 

1, 2, 3 

2, 3, 4 

3, 4, 5 

4, 5, 6 

5, 6, 7 

6, 7, 8 

7, 8, 9 

1.26   字典排序(컬렉션.OrderedDict)

>>> m = dict((str(x), x) for x in range(10))  

>>> print ', '.join(m.keys())  

1, 0, 3, 2, 5, 4, 7, 6, 9, 8 

>>>> m = collections.OrderedDict((str(x), x) for x in range(10))  

>>> print ', '.join(m.keys())  

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 

>>> m = collections.OrderedDict((str(x), x) for x in range(10, 0, -1))  

>>> print ', '.join(m.keys())  

10, 9, 8, 7, 6, 5, 4, 3, 2, 1 

1.27   缺省字典(컬렉션 .defaultdict)

>>> m = dict()  

>>> m['a']  

추적(최근 c모두 마지막):  

  파일 "", 라인 1, <모듈>  

KeyError: 'a' 

>>>  

>>> m = collections.defaultdict(int)  

>>> m['a']  

>>> m['b']  

>>> m = collections.defaultdict(str)  

>>> m['a']  

'' 

>>> m['b'] += 'a' 

>>> m['b']  

'a' 

>>> m = collections.defaultdict(lambda: '[기본값]')  

>>> m['a']  

'[기본값]' 

>>> m['b']  

'[기본값]' 

1.28   用缺省字典表示简单的树

>>> import json  

>>> tree = 람다: collections.defaultdict(tree)  

>>> root = tree()  

>>> root['menu']['id'] = '파일' 

>>> root['menu']['value'] = '파일' 

>>> root['menu']['menuitems']['new']['value'] = '새로 만들기' 

>>> root['menu']['menuitems']['new']['onclick'] = 'new();' 

>>> root['menu']['menuitems']['open']['value'] = '열기' 

>>> root['menu']['menuitems']['open']['onclick'] = 'open();' 

>>> root['menu']['menuitems']['close']['value'] = '닫기' 

>>> root['menu']['menuitems']['close']['onclick'] = 'close();' 

>>> print json.dumps(root, sort_keys=True, indent=4, 구분 기호=(',', ': '))  

{  

    "메뉴" : {  

        "id": "file",  

        "menuitems": {  

            "close": {  

                "onclick" : "닫기 ();",  

                "값": "닫기" 

            },  

            "새 항목": {  

               "onclick": "새로 만들기( );",  

                "값": "새로 만들기" 

            },  

            "열기": {  

               "onclick": "열기() ;",  

                "value": "열기" 

            }  

        },  

        "value": "파일" 

}  

(到https://gist.github.com/hrldcpr/2012250查看详情)

1.29   映射对象到唯一的序列数 (collections.defaultdict)

>>> itertools, 컬렉션 가져오기  

>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)  

>>> value_to_numeric_map['a']  

>>> value_to_numeric_map['b']  

>>> value_to_numeric_map['c']  

>>> value_to_numeric_map['a']  

>>> value_to_numeric_map['b']  


위 내용은 Python 언어의 꼭 봐야 할 기능과 기술 30가지(2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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