Home  >  Article  >  Backend Development  >  30 must-see features and skills of the Python language (2)

30 must-see features and skills of the Python language (2)

高洛峰
高洛峰Original
2017-03-17 16:45:551008browse

Since I started learningPython, I decided to maintain a frequently used "trick" ” list. Whenever I see a paragraph that makes me think, “Cool, that could work!” ” code (in an example, in StackOverflow, in open source software, etc.), I try it until I understand it and then add it to the list. This post is Cleaned up part of the list. If you are an experienced Python programmer, although you may already know some, you may still find some that you don't know. If you are a C, C++ or Java programmer who is learning Python. , or just starting to learn programming, then you will find many of them very useful like I did

Each trick or language feature can only be verified through examples without too much explanation. . While I've tried to make the examples clear, some of them will still look a little complicated depending on your familiarity, so if it's not clear after looking at the examples, the titles will provide enough information to get you through Google. Get detailed content.

The list is sorted by difficulty, with commonly used language features and techniques at the front.

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

>>>

list

(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 = lambda 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]

Note: According to Python documentation, itertools.chain.from_iterable is preferred.

1.16

Generator

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

range

(10)) >>>

next

(g) 0

>>> next(g )

1

>>> next(g)

4

>>> next(g)

9

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

2025

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

408

1.17 Iterate dictionary

>>> m = {x: x ** 2 for x in range(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 Reverse the dictionary by iterating over the dictionary

>>> m = {'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 Named sequence (collections.namedtuple)

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

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

>>> p

Point(x=1.0, y=2.0)

>>> p.x

1.0

>>> p.y

2.0

1.20

Inheritance of named lists

:>>>

class

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

...     def add(self, other):  

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

...  

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

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

>>> p + q  

Point(x=3.0, y=5.0) 

1.21   集合及集合操作

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

>>> A  

set([1, 2, 3])  

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

>>> B  

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

>>> A | B  

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

>>> A & B  

set([3])  

>>> A - B  

set([1, 2])  

>>> B - A  

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

>>> A ^ B  

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

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

True 

1.22   多重集及其操作 (collections.Counter)

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

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

>>> A  

Counter({2: 2, 1: 1})  

>>> B  

Counter({2: 2, 3: 1})  

>>> A | B  

Counter({2: 2, 1: 1, 3: 1})  

>>> A & B  

Counter({2: 2})  

>>> A + B  

Counter({2: 4, 1: 1, 3: 1})  

>>> A - B  

Counter({1: 1})  

>>> B - A  

Counter({3: 1}) 

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

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

>>> A  

Counter({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   双端队列 (collections.deque)

>>> Q = collections.deque()  

>>> Q.append(1)  

>>> Q.appendleft(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)  

...     print ', '.join(str(x) for x in last_three)  

...  

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   字典排序 (collections.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   缺省字典 (collections.defaultdict)

>>> m = dict()  

>>> m['a']  

Traceback (most recent call last):  

  File "", line 1, in <module>  

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: '[default value]')  

>>> m['a']  

'[default value]' 

>>> m['b']  

'[default value]' 

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

>>> import json  

>>> tree = lambda: collections.defaultdict(tree)  

>>> root = tree()  

>>> root['menu']['id'] = 'file' 

>>> root['menu']['value'] = 'File' 

>>> root['menu']['menuitems']['new']['value'] = 'New' 

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

>>> root['menu']['menuitems']['open']['value'] = 'Open' 

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

>>> root['menu']['menuitems']['close']['value'] = 'Close' 

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

>>> print json.dumps(root, sort_keys=True, indent=4, separators=(',', ': '))  

{  

    "menu": {  

        "id": "file",  

        "menuitems": {  

            "close": {  

                "onclick": "close();",  

                "value": "Close" 

            },  

            "new": {  

                "onclick": "new();",  

                "value": "New" 

            },  

            "open": {  

                "onclick": "open();",  

                "value": "Open" 

            }  

        },  

        "value": "File" 

    }  

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

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

>>> import itertools, collections  

>>> 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']  


The above is the detailed content of 30 must-see features and skills of the Python language (2). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn