Python的數據結構和算法
解決方案
拓展
解決方案
拓展
什麼是序列
序列的例子
案例一:將序列分解為單獨的變量
案例二:從任意長度的可迭代對象是分解元素
Python的數據結構和算法Python內置了很多有用的數據結構,比如列表(list),集合(set),字典(dictionary),絕大情況下我們可以直接使用這些數據結構,但有些特殊需求需要我們考慮,比如搜索,排序,排列,篩選等。本次內容我們著重探討常見的數據結構和數據結構相關的算法。
維基百科上如此解釋,我們可參考一二:
眾所周知,最早時期計算機是為了解決數學而誕生,序列是數學的一種,被排成一列的對象或事件;這樣,每個元素不是在其它元素前,就是在其它元素後。因此,序列是有順序的元素的集合。
有限序列
(C, Y, R)是一個字母序列,順序是C第一,Y第二,R第三。
無限序列
(a1, a2, .., an) 無限個元素按一定順序的排列
空序列
() 不包括任何元素的序列
我們有一個包含N個元素的元組或序列,現在想將它分解為N個單獨的變量
任何序列或可迭代對象都可以通過簡單的賦值操作來分解為單獨的變量,唯一要求是變量和總數和結構需要和序列相吻合。
In [1]:p= (4,5) In [2]: x, y =p In [3]: xOut[3]:4 In [4]: yOut[4]:5 In [5]: m, n,q=pValueError Traceback (most recent call last)<ipython-input-5-c90260dd655e>in<module>()---->1m, n,q=p ValueError: not enough values to unpack (expected3, got2)
In[6]:data= ['ACME',50,91.1, (2012,12,21) ] In[7]:name, shares, price, date =data In[8]:nameOut[8]:'ACME' In[9]: priceOut[9]:91.1 In[10]: dateOut[10]: (2012,12,21) In[11]:name, shares, price, (year, month, day) =data In[12]: yearOut[12]:2012 In[13]: monthOut[13]:12## 拓展
In[14]: _, shares, price, _ =data In[15]: sharesOut[15]:50 In[16]: priceOut[16]:91.1
案例二:從任意長長度的可迭代對象是分解元素對於可迭代對象長度可長的情況,可能會出現「分解的值過多(too many values to unpack)」的異常
## 解決方案python的*表達式可以解決該類問題。如期末成績平均值統計,每班80個學生,分別去掉第一名和最後一名求平均值,這裡就很方便了。
In [24]: grades = (42,55,64,74,83,90,93,95,98,99,99,99) In [25]: def drop_frist_last(grades):...:first, *middle,last= grades...:returnavg(middle)...: In [26]:middleOut[26]: [55,64,74,83,90,93,95,98,99,99]In[27]:record= ['Dave','dave@example.com','773-555-1212','847-555-1212'] In[28]:name, email, *phone_num =record In[29]:nameOut[29]:'Dave' In[30]: emailOut[30]:'dave@example.com' In[31]: phone_numOut[31]: ['773-555-1212','847-555-1212']## 拓展
In[35]:line= '_hidd:*:261:261:HID Service User:/var/empty:/usr/bin/false' In[36]: uname, *fields, homedir,sh=line.split(':') In[37]: homedirOut[37]: '/var/empty' In[38]:shOut[38]: '/usr/bin/false'
In[39]:data= ['ACME',50,91.1, (2012,12,21) ] In[40]:name, *_, (*_, year) =data In[41]:data= ['ACME',50,91.1, (12,21,2012) ] In[42]:name, *_, (*_, year) =data In[43]: yearOut[43]:2012
請隨需且勿全申請加群
以太python小範圍溝通群,群號碼:662769442(新群)
Ansible中文權威群:372011984(千人群已滿)
Ansible中文權威-2號群:486022616(餘10空位,計劃開3群)
Ansible中文權威-3號群,群號碼:319894617(滿)
AWK&SED企業實戰: 260039357(千人群,餘200空位)
docker企業架構實踐:491533668(千人群已滿)
Docker企業架構實踐2群: 601403280(新)
ELK企業架構1群 378216203