a = deque(maxlen=3) a.append(2) a.appendleft(1) a.append(3) a.append(4) # a.pop() 也能夠 a.leftpop() # 輸出 [2, 3, 4] # ps: 在隊列兩端插入或刪除元素時間複雜度都是 O(1) ,區別於列表,在列表的開頭插入或刪除元素的時間複雜度爲 O(N)
import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2] print(heapq.nlargest(3, nums)) # Prints [42, 37, 23] print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2]
values = ['1', '2', '-3', '-', '4', 'N/A', '5'] def is_int(val): try: x = int(val) return True except ValueError: return False ivals = list(filter(is_int, values)) print(ivals) # Outputs ['1', '2', '-3', '4', '5']
用 iterable 中函數 function 返回真的那些元素,構建一個新的迭代器。iterable 能夠是一個序列,一個支持迭代的容器,或一個迭代器。若是 function 是 None ,則會假設它是一個身份函數,即 iterable 中全部返回假的元素會被移除。數據庫
請注意, filter(function, iterable) 至關於一個生成器表達式,當 function 不是 None 的時候爲 (item for item in iterable if function(item));function 是 None 的時候爲 (item for item in iterable if item) 。app
from collections import OrderDict
會默認按照插入的順序進行排序,能夠在數據庫查出來數據進行拼裝時候不須要轉換爲列表排序sorted(zip(prices.values(), prices.keys()))
能夠先將字典的key和value進行反轉映射,而後就sorted排序,默認會按照元祖中的第一個值進行排序from oprator import itemgetter # 這個方法能夠代替匿名函數,而且效率更高 rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'Big', 'lname': 'Jones', 'uid': 1004} ] rows_by_uid = sorted(rows, key=itemgetter('uid')) 等同於 rows_by_uid = sorted(rows, key=lambda r: r['uid']) # 也同時支持多 key進行排序 rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
class Age: def __init__(self, number): self.number = number def __repr__(self): return 'Age({})'.format(self.number) def sort_notcompare(): ages = [Age(23), Age(3), Age(99)] print(ages) # 匿名函數方式 print(sorted(ages, key=lambda a: a.number)) # attrgetter 方式 效率更高 from operator import attrgetter sorted(ages, key=attrgetter('number'))
from operator import itemgetter from itertools import groupby # 使用groupby 進行分組 rows = [ {'address': '5412 N CLARK', 'date': '07/01/2012'}, {'address': '5148 N CLARK', 'date': '07/04/2012'}, {'address': '5800 E 58TH', 'date': '07/02/2012'}, {'address': '2122 N CLARK', 'date': '07/03/2012'}, {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'}, {'address': '1060 W ADDISON', 'date': '07/02/2012'}, {'address': '4801 N BROADWAY', 'date': '07/01/2012'}, {'address': '1039 W GRANVILLE', 'date': '07/04/2012'}, ] rows.sort(key=itemgetter('date')) # Iterate in groups for date, items in groupby(rows, key=itemgetter('date')): print(date) for i in items: print (i) # 輸出結果: 07/01/2012 {'date': '07/01/2012', 'address': '5412 N CLARK'} {'date': '07/01/2012', 'address': '4801 N BROADWAY'} 07/02/2012 {'date': '07/02/2012', 'address': '5800 E 58TH'} {'date': '07/02/2012', 'address': '5645 N RAVENSWOOD'} {'date': '07/02/2012', 'address': '1060 W ADDISON'} 07/03/2012 {'date': '07/03/2012', 'address': '2122 N CLARK'} 07/04/2012 {'date': '07/04/2012', 'address': '5148 N CLARK'} {'date': '07/04/2012', 'address': '1039 W GRANVILLE'}