python實用小技之資料結構
本文大多數例子搬自 python cookbook 這裡是對學習的一個總結和提煉
ps:python版本為python3
1.解壓序列賦值給多個變數
# 有一個包含 N 個元素的元組或者是序列,怎樣將它裡面的值解壓後同時賦值給 N 個變數?
data = ['ACME', 50, 91.1, (2012, 12, 21)]
# 任何的序列(或者是可迭代物件)可以透過一個簡單的賦值語句解壓並賦值給多個變數
# 變數的數量必須跟序列元素的數量是一樣的
name, shares, prices, date = data
print(name, shares, prices, date, sep=" | ", end="\n")
# 如果只需要一部分,可以給個佔位變數如
_, sha, pr, _ = data
print(sha,pr,sep=' | ')
執行結果:
ACME | 50 | 91.1 | (2012, 12, 21)
50 | 91.1
2.解壓可迭代物件賦值給多個變數
# 解壓可迭代物件賦值給多個變數
def drop_frist_last(grades):
frist, *middle, last = grades
return sum(middle) / len(middle)
print(drop_frist_last([0, 60, 70, 80, 100]))
# 有時候,你想解壓一些元素後丟棄它們,可以使用 比如 _ 或者 ign
record = ('ACME', 50, 123.45, (12, 18, 2012))
name,*_,(*_,year) = record
print(name,year)
執行結果:
70.0
ACME 2012
3.保留有限的歷史記錄
'''
使用 deque(maxlen=N) 建構函式會新建一個固定大小的佇列。當新的元素加入並且這個佇列已滿的時候, 最老的元素會自動被移除掉
'''
def search(lines, pattern, histroy=60):
previous_lines = deque(maxlen=histroy)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
print(len(previous_lines))
for item in previous_lines:
print(item)
if __name__ == "__main__":
with open(os.getcwd() + "/Lesson1.py") as f:
for line, prevlines in search(f, '50', 3):
print("type prevlines =", type(prevlines))
for pline in prevlines:
print('pline = ', pline, end='')
print("type line =", type(line))
# print('line = ', line, end='')
print('-' * 20)
#
4.怎樣從一個集合中獲得最大或者最小的 N 個元素列表?
# 當集合是一個列表是
nums = [3, 10, 5, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
# 如果是更負責的物件時候
mydirt = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75}]
print(heapq.nlargest(2, mydirt, key=lambda l: l['price']))
print(heapq.nsmallest(2, mydirt, key=lambda l: l['price']))
執行結果
[42, 37, 23]
[-4, 2, 3]
[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'IBM', 'shares': 100, 'price': 91.1}]
[{'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}]
ps:堆資料結構最重要的特徵是 heap[0] 永遠是最小的元素,另外 nlargest,nsmallest 適合查詢的元素個數相對比較小的時候,如果你僅僅想查詢唯一的最小或最大(N=1)的元素的話,那麼使用 min() 和 max() 函式會更快些。 類似的,如果 N 的大小和集合大小接近的時候,通常先排序這個集合然後再使用切片操作會更快點 ( sorted(items)[:N] 或者是 sorted(items)[-N:] )
5.字典排序
'''
你想建立一個字典,並且在迭代或序列化這個字典的時候能夠控制元素的順序。
'''
from collections import OrderedDict
d = OrderedDict()
d['foo'] = 1
d['beer'] = 2
d['bar'] = 4
d['park'] = 3
for key in d:
print(key, d[key])
執行結果:
foo 1
beer 2
bar 4
park 3
6.字典中的鍵對映多個值
from collections import defaultdict
df_d = defaultdict(list)
df_d['a'].append(1)
df_d['a'].append(2)
df_d['b'].append(4)
print(df_d)
d2 = defaultdict(set)
pairs = [('a', 1), ('a', 2), ('b', 4)]
for key, value in pairs:
d2[key].add(value)
print(d2)
執行結果:
defaultdict(<class 'list'>, {'a': [1, 2], 'b': [4]})
defaultdict(<class 'set'>, {'a': {1, 2}, 'b': {4}})
7.字典的運算(求最小值、最大值、排序等)
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# 求最小值
# 方法 1,透過zip 函式建立的是一個只能訪問一次的迭代,將鍵值反過來
print(min(zip(prices.values(), prices.keys())))
# 輸出 (10.75, 'FB')
# 方法二 直接取values 獲取最小值,不過你就不知道對於的key
print(min(prices.values()))
# 輸出 10.75
# 方法三
min_key = min(prices, key=lambda k: prices[k])
print(prices[min_key])
# 輸出 FB
# 排序
prices_sorted = sorted(zip(prices.values(), prices.keys()))
print(prices_sorted)
# 輸出 [(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2933320/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python資料結構之圖的實現Python資料結構
- python資料結構之棧Python資料結構
- Python 資料結構之DataframePython資料結構
- 【Python】資料結構之字典Python資料結構
- python 資料結構之單連結串列的實現Python資料結構
- python 資料結構之雙向連結串列的實現Python資料結構
- python 資料結構之順序列表的實現Python資料結構
- python資料結構之棧、佇列的實現Python資料結構佇列
- 用python講解資料結構之樹的遍歷Python資料結構
- Java實現資料結構之線性結構Java資料結構
- 資料結構之通用樹結構的實現資料結構
- Python基礎之:Python的資料結構Python資料結構
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- Python技術分享:內建資料結構之雙向佇列Python資料結構佇列
- 資料結構之php實現棧資料結構PHP
- 資料結構小白系列之資料結構概述資料結構
- Python資料結構——樹的實現Python資料結構
- Python基礎之os和資料結構Python資料結構
- Python資料結構——連結串列的實現Python資料結構
- python 資料結構Python資料結構
- Python資料結構Python資料結構
- 資料結構之php實現陣列資料結構PHP陣列
- 資料結構之php實現佇列資料結構PHP佇列
- 資料結構 - 圖之程式碼實現資料結構
- php實現基本資料結構之連結串列PHP資料結構
- 前端資料結構(3)之連結串列及其應用前端資料結構
- 資料結構之「樹」資料結構
- 資料結構之「棧」資料結構
- 資料結構之——棧資料結構
- 資料結構之棧資料結構
- 資料結構之圖資料結構
- 資料結構實驗:連結串列的應用資料結構
- 前端資料結構(1)之棧及其應用前端資料結構
- 資料結構-雙向連結串列(Python實現)資料結構Python
- python之資料結構與演算法分析Python資料結構演算法
- 開心檔之Python3 資料結構Python資料結構
- 資料結構學習之樹結構資料結構
- 資料庫注入技術小結資料庫