從我開始學習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
forl 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)]
iftype( 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)
4
>>> next(g)
>>> 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 迭代字典>>> 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 ([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)) True1.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]) eft([5, 6]) >>>> Q deque([6, 5, 2, 1, 3, 4]) >>>> Q.pop() 4 >>>> Q.popleft() 6 >>>> 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)6, 7, 8 7, 8, 9 eredDict)>>>> m = dict((str(x), x) for x in range(10)) 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 "
KeyError: 'a'
>>>>
>>>> m = collections.defaultdict(int)
>>>>> m['a']
0
#>>>> m['b']
0
#>>>> 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']
1
>>>> value_to_numeric_map['c']
2
>>>> value_to_numeric_map['a']
#0
>>>> value_to_numeric_map['b']
1
以上是必看的的30個Python語言的特點技巧(2)的詳細內容。更多資訊請關注PHP中文網其他相關文章!