首頁  >  文章  >  後端開發  >  必看的的30個Python語言的特點技巧(2)

必看的的30個Python語言的特點技巧(2)

高洛峰
高洛峰原創
2017-03-17 16:45:55973瀏覽

從我開始學習Python時我就決定維護一個經常使用的「竅門」列表。不論何時當我看到一段讓我覺得「酷,這樣也行! 」的程式碼時(在一個例子中、在StackOverflow、在開源軟體中,等等),我會嘗試它直到理解它,然後把它加到列表中。這篇文章是清理過清單的一部分。 ,或剛開始學習程式設計,那麼你會像我一樣發現它們中的許多非常有用。 。取得詳細的內容。 = [[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] 注意: 根據Python的文檔,itertools.chain.from_iterable是首選。 1.16  

產生器

運算式

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

range

(10))  >>> next(g)  

>>> next(g )  

>>> next(g)  

>>> next(g)  

>>> next(g)  

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

2025 

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

408 

1.17   迭代字典

>>> 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   透過迭代字典反轉字典

#>>> 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   命名序列(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   命名清單的###繼承###:#######>>> #### class### Point(collections.namedtuple('PointBase', ['x', 'y'])):  ######...     slots = ()  ###

...     def add(self, other):  

...             return# Point(x=self.x + other.x, yother=self.y +

# Point(x=self.x + other.x, yother=self.y +

#. y)

...

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

>>>> q = 點(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])

>>>>>一個 | 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.Count

er )

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

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

>>>> A

計數器({2: 2, 1: 1})

>> B

計數器({2: 2, 3: 1})

>>一個 | 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  

Counter({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  雙端佇列

(collections.雙端佇列)

>> Q = collections.deque()

>>>> Q.append

(1)  

>>>> Q.appendleft

(2)  

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

>>>> Q.extendl

eft([5, 6])  

>>>> Q

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

>>>> Q.pop()  

>>>> Q.popleft()  

>>>> Q

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

>>>>> Q.旋轉(3)

>>> Q

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

>>>>> Q.rotate(-3)

>>>>> Q  

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

1.25  有最大長度的雙端佇列 (collections.deque)

>>>>> last_two = collections.deque(maxlen=3)

>>>> for i in xrange(10):  

...     last_third.append(i)  

...     print

', '.join(str(x) for x 在最後一個三)  

...  

#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 字典排序(集合.Ord

eredDict)

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

>>>> print ', '.join(m.key

s())

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(最近的 call 最後):  

  File "",第 1 行,in 模組>  

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  用字典字典表示簡單的樹

>>>>導入 json#  

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

>>>>根 = 樹()

>>> root['選單']['id'] = '檔案'

>>>> root['選單']['值'] = '檔案'

>>>> 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, seperators=(',', ': '))  

#{  

#    “選單” : {  

        "id": "文件",  

        "menuitems": {  

    onclick": "關閉();",  

                "value": "關閉" 

            },  

#  |        "onclick": "new( );",  

                "value": "新建" 

            },  

#==        "onclick": "open() ;",  

                「值」: 「開啟」 

            }  #.

# }. ## }  

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

0

>>> value_to_numeric_map['b']  

>>>> value_to_numeric_map['c']  

>>>> value_to_numeric_map['a']  

#0 

>>>> value_to_numeric_map['b']  


#

以上是必看的的30個Python語言的特點技巧(2)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn