日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python五篇慢慢弹】数据结构看python

發(fā)布時間:2024/4/17 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python五篇慢慢弹】数据结构看python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)結(jié)構(gòu)看python

作者:白寧超

2016年10月9日14:04:47

摘要:繼<快速上手學(xué)python>一文之后,筆者又將python官方文檔認(rèn)真學(xué)習(xí)下。官方給出的pythondoc入門資料包含了基本要點(diǎn)。本文是對文檔常用核心要點(diǎn)進(jìn)行梳理,簡單冗余知識不再介紹,作者假使你用c/java/c#/c++任一種語言基礎(chǔ)。本系列文章屬于入門內(nèi)容,老鳥可以略看也可以略過,新鳥可以從篇一<快速上手學(xué)python>先接觸下python怎樣安裝與運(yùn)行,以及pycharm編輯器的使用和配置;篇二<數(shù)據(jù)結(jié)構(gòu)看python>介紹python語言中控制語句、列表、字典、元組、循環(huán)等基本操作;篇三<函數(shù)修行知python>細(xì)解python語言函數(shù)的范疇與內(nèi)容;篇四<模塊異常談python>采用登錄的案例詳解模塊來龍去脈;篇五<‘類’過依然繼續(xù)前行,直至ending再出發(fā)>介紹類的基本操作,擴(kuò)展虛擬環(huán)境、標(biāo)準(zhǔn)類庫和下個系列預(yù)告。(本文原創(chuàng),轉(zhuǎn)載注明出處:數(shù)據(jù)結(jié)構(gòu)看python)

目錄:


【Python五篇慢慢彈(1)】快速上手學(xué)python 【Python五篇慢慢彈(2)】數(shù)據(jù)結(jié)構(gòu)看python 【Python五篇慢慢彈(3)】函數(shù)修行知python 【Python五篇慢慢彈(4)】模塊異常談python 【Python五篇慢慢彈(5)】‘類’過依然繼續(xù)前行,直至ending再出發(fā)

1 深入條件控制


?小記:編程風(fēng)格

  • 使用 4 空格縮進(jìn),而非 TAB:在小縮進(jìn)(可以嵌套更深)和大縮進(jìn)(更易讀)之間,4空格是一個很好的折中。TAB 引發(fā)了一些混亂,
  • 使用空行分隔函數(shù)和類,以及函數(shù)中的大塊代碼,可能的話,注釋獨(dú)占一行
  • 把空格放到操作符兩邊,以及逗號后面,但是括號里側(cè)不加空格:a = f(1, 2) + g(3, 4)
  • 統(tǒng)一函數(shù)和類命名:推薦類名用 駝峰命名, 函數(shù)和方法名用 小寫_和_下劃線。
  • Python 的默認(rèn)情況下,UTF-8最好

while 和 if 語句中使用:比較和包含。
比較操作符 in 和 not in 審核值是否在一個區(qū)間之內(nèi)。
比較操作可以傳遞。例如 a < b == c 審核是否 a 小于 b 并且 b 等于 c。
邏輯操作符 and 和 or 組合,not 具有最高的優(yōu)先級, or 優(yōu)先級最低,所以 A and not B or C 等于 (A and (notB)) or C。
邏輯操作符 and 和 or 參數(shù)從左向右解析,結(jié)果確定就停止。例如,如果 A 和 C 為真而 B 為假, A and B and C 不會解析 C。
可以把比較或其它邏輯表達(dá)式的返回值賦給一個變量,例如:

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance' >>> non_null = string1 or string2 or string3 >>> non_null 'Trondheim'

解釋:and 和 or 參數(shù)從左向右解析,結(jié)果確定就停止。string1 or string2 為True,打印string2是值,后面忽略即string3。

?比較序列和其它類型:序列對象可以與相同類型的其它對象比較。

首先比較前兩個元素,如果不同,就決定了比較的結(jié)果;如果相同,就比較后兩個元素,依此類推,直到所有序列都完成比較。

>>> (1,3,67)<(1,4,2) True >>> (1,3,67)>(1,4,2) False >>> [1, 2, 3] < [1, 2, 4] True

如果兩個元素本身就是同樣類型的序列,就遞歸字典序比較。如果兩個序列的所有子項(xiàng)都相等,就認(rèn)為序列相等。

>>> (1, 2, 3) == (1.0, 2.0, 3.0) True

如果一個序列是另一個序列的初始子序列,較短的一個序列就小于另一個。字符串的字典序按照單字符的 ASCII 順序。

>>> (1, 2) < (1, 2, -1) True >>> (1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4) True

2 基本的列表對象方法


?List列表基本操作概要:

list.append(x):元素添加到鏈表的結(jié)尾,相當(dāng)于 a[len(a):] = [x]。
list.extend(L):給定列表所有元素添加,相當(dāng)于 a[len(a):] = L。
list.insert(i, x):指定位置插入。其中l(wèi)ist.insert(0, x)=插入鏈表首,list.insert(len(a), x)=list.append(x)=插入鏈表尾
list.remove(x):刪除鏈表指定元素。
list.pop([i]):指定索引下刪除元素,a.pop() 返回最后一個元素。
list.clear():刪除所有元素。相當(dāng)于 del a[:]。
list.index(x):返回鏈表首個值 x 的索引。
list.count(x):統(tǒng)計元素 x出現(xiàn)的次數(shù)。
list.sort():排序。
list.reverse():倒排鏈表。
list.copy():淺拷貝。等同于 a[:]。
操作運(yùn)行代碼:

a = [66.25, 333, 333, 1, 1234.5] print(a.count(333), a.count(66.25), a.count('x')) a.insert(2, -1) a.append(333) [66.25, 333, -1, 333, 1, 1234.5, 333] a.index(333) a.remove(333) a.reverse() [333, 1234.5, 1, 333, -1, 66.25] a.sort() a.pop()

?List鏈表的多重共用

鏈表當(dāng)作堆棧用:鏈表特性先進(jìn)后出跟堆棧性質(zhì)一致,進(jìn):append,出:pop:

程序?qū)嵗菔?#xff1a;

>>> stack = [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack [3, 4, 5, 6] >>> stack.pop() 6 >>> stack [3, 4,5]

鏈表當(dāng)作隊列使用:如上演示,知道鏈表具備先進(jìn)后出的性質(zhì),即符合堆棧性質(zhì)。大家記得否鏈表索引可以為負(fù)數(shù),如此你是不是想到先進(jìn)先出啦?對嘍,這就是隊列的性質(zhì)我們完全可以當(dāng)著隊列用。列表這樣用效率不高。在頭部插入和彈出很慢,因?yàn)橐粋€元素出隊,要移動整個列表中的所有元素。要實(shí)現(xiàn)隊列,使用 集合collections.deque,它為在首尾兩端快速插入和刪除而設(shè)計。例如:

程序運(yùn)行實(shí)例:

>>> from collections import deque >>> queue = deque(["Eric", "John", "Michael"]) >>> queue.append("Terry") # Terry arrives >>> queue.append("Graham") # Graham arrives >>> queue.popleft() # The first to arrive now leaves 'Eric' >>> queue.popleft() # The second to arrive now leaves 'John' >>> queue # Remaining queue in order of arrival deque(['Michael', 'Terry', 'Graham'])

列表推導(dǎo):如下實(shí)例快速解析理解

>>> [(user,name) for user in ['bnc','ad','admin'] for name in ['boy','xiaoming','bnc','admin'] if user==name] [('bnc', 'bnc'), ('admin', 'admin')] 等同 >>> combs = [] >>> for user in ['bnc','ad','admin']: ... for name in ['boy','xiaoming','bnc','admin']: ... if user == name: ... combs.append((user, name)) ...>>> combs [('bnc', 'bnc'), ('admin', 'admin')]>>> # call a method on each element >>> freshfruit = [' banana', ' loganberry ', 'passion fruit '] >>> [weapon.strip() for weapon in freshfruit] ['banana', 'loganberry', 'passion fruit']

?

鏈表做文本處理矩陣計算:交換行列

#由三個長度為 4 的列表組成的 3x4 矩陣,交換行列

>>> matrix = [ ... [1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12], ... ] >>> [[row[i] for row in matrix] for i in range(4)] [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 等于 >>> transposed = [] >>> for i in range(4): ... transposed.append([row[i] for row in matrix]) ... >>> transposed [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

3 del語句


?del語句:不同于有返回值的 pop() 方法,其按索引來刪除子項(xiàng)

>>> a = [-1, 1, 66.25, 333, 333, 1234.5] >>> del a[0] >>> a [1, 66.25, 333, 333, 1234.5] >>> del a[2:4] # 切片 >>> a [1, 66.25, 1234.5] >>> del a[:] >>> a []

  

4 元組、序列、集合和字典


?元組和列表的區(qū)別

元組:不同種類元素,不可變;
列表:相同種類的元素,可變

>>> t = 12345, 54321, 'hello!' >>> t[0] 12345 >>> t (12345, 54321, 'hello!') >>> # Tuples may be nested: ... u = t, (1, 2, 3, 4, 5) >>> u ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

set集合

特點(diǎn):set集合是無序不重復(fù)元素的集。
基本功能:關(guān)系測試和消除重復(fù)元素。還支持 union(聯(lián)合),intersection(交),difference(差)和 sysmmetric difference(對稱差集)等數(shù)學(xué)運(yùn)算。
集合創(chuàng)建:大括號或 set() 函數(shù)。注意:空集合的創(chuàng)建必須使用 set() 而不是 {}。{}可以用于創(chuàng)建空字典。

集合實(shí)例演示:

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} >>> print(basket) # show that duplicates have been removed {'orange', 'banana', 'pear', 'apple'} >>> 'orange' in basket # fast membership testing True >>> 'crabgrass' in basket False>>> # Demonstrate set operations on unique letters from two words >>> a = set('abracadabra') >>> b = set('alacazam') >>> a # unique letters in a {'a', 'r', 'b', 'c', 'd'} >>> a - b # letters in a but not in b {'r', 'd', 'b'} >>> a | b # letters in either a or b {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # letters in both a and b {'a', 'c'} >>> a ^ b # letters in a or b but not both {'r', 'd', 'b', 'm', 'z', 'l'}

類似 列表推導(dǎo)式,這里有一種集合推導(dǎo)式語法:

>>> a = {x for x in 'abracadabra' if x not in 'abc'} >>> a {'r', 'd'}

字典

字典以 關(guān)鍵字 為索引,關(guān)鍵字可以是任意不可變類型,通常用字符串或數(shù)值。字典本質(zhì)是無序鍵值對 (key:value 對)集合,同一字典內(nèi)鍵必須是互不相同的。
字典創(chuàng)建: {} 。
主要操作:據(jù)鍵存儲和析取值。可用 del 來刪除鍵:值對(key:value)。
排序: sorted(d.keys()) )。
檢查字典:用 in 關(guān)鍵字檢查字典中是否存在某個關(guān)鍵字。
字典實(shí)例演示:

>>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> list(tel.keys()) ['irv', 'guido', 'jack'] >>> sorted(tel.keys()) ['guido', 'irv', 'jack'] >>> 'guido' in tel True >>> 'jack' not in tel False

dict() 構(gòu)造函數(shù)可以直接從 key-value 對中創(chuàng)建字典:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) {'sape': 4139, 'jack': 4098, 'guido': 4127} >>> dict(sape=4139, guido=4127, jack=4098) {'sape': 4139, 'jack': 4098, 'guido': 4127}>>> tel={x:x**2 for x in range(2,12,3)} >>> list(tel.keys()) [8, 2, 11, 5] >>> sorted(tel.keys()) [2, 5, 8, 11]

5 循環(huán)技巧


?字典循環(huán),關(guān)鍵字和對應(yīng)的值可以使用 items() 方法同時解讀出來:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'} >>> for k, v in knights.items(): ... print(k, v) ... gallahad the pure robin the brave

在序列中循環(huán)時,索引位置和對應(yīng)值可以使用 enumerate() 函數(shù)同時得到:

>>> for i, v in enumerate(['tic', 'tac', 'toe']): print(i, v) 0 tic 1 tac 2 toe

同時循環(huán)兩個或更多的序列,可以使用 zip() 整體打包:

>>> questions = ['name', 'quest', 'favorite color'] >>> answers = ['lancelot', 'the holy grail', 'blue'] >>> for q, a in zip(questions, answers): print('What is your {0}? It is {1}.'.format(q, a)) What is your name? It is lancelot. What is your quest? It is the holy grail. What is your favorite color? It is blue.

需要逆向循環(huán)序列的話,先正向定位序列,然后調(diào)用 reversed() 函數(shù):

>>> for i in reversed(range(1, 10, 2)): print(i) 9 7 5 3 1

要按排序后的順序循環(huán)序列的話,使用 sorted() 函數(shù),它不改動原序列,而是生成一個新的已排序的序列:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] >>> for f in sorted(set(basket)): print(f) apple banana orange pear

若要在循環(huán)內(nèi)部修改正在遍歷的序列(例如復(fù)制某些元素),建議您首先制作副本。在序列上循環(huán)不會隱式地創(chuàng)建副本。切片表示法使這尤其方便:

>>> words = ['cat', 'window', 'defenestrate'] # Loop over a slice copy of the entire list. >>> for w in words[:]: if len(w) > 6: words.insert(0, w) >>> words ['defenestrate', 'cat', 'window', 'defenestrate']

6 參考文獻(xiàn)和推薦資料


  • ?Python 官方網(wǎng)站 :包含代碼、文檔和 Web 上與 Python 有關(guān)的頁面鏈接該網(wǎng)站鏡像于全世界的幾處其它問題,類似歐洲、日本和澳大利亞。鏡像可能會比主站快,這取決于你的地理位置
  • 快速訪問 Python 的文檔
  • Python 包索引 :索引了可供下載的,用戶創(chuàng)建的 Python 模塊。如果你發(fā)布了代碼,可以注冊到這里,這樣別人可以找到它
  • The Scientific Python : 項(xiàng)目包括數(shù)組快速計算和處理模塊,和大量線性代數(shù)、傅里葉變換、非線性solvers、隨機(jī)數(shù)分布,統(tǒng)計分析以及類似的包
  • 官方python學(xué)習(xí)文檔
  • 簡明Python教程
  • 廖雪峰:python教程
  • Python官網(wǎng)文檔
  • 【51cto學(xué)院,入門課程】Python零基礎(chǔ)入門學(xué)習(xí)視頻教程
  • 【個人博客:案例】GitHub數(shù)據(jù)提取與分析
  • 【csdn】python知識庫
  • 【社區(qū)】python中文學(xué)習(xí)大本營
  • 【個人博客】老王python
  • 【51cto學(xué)院】如何用python開發(fā)跨平臺的記事本視頻課程
  • 51cto學(xué)院,網(wǎng)站開發(fā)】臺灣輔仁大學(xué):Python Django基礎(chǔ)視頻課程
  • 51cto學(xué)院,網(wǎng)站開發(fā)用Python Django快速做出高大上的BBS論壇網(wǎng)站
  • ?

    轉(zhuǎn)載于:https://www.cnblogs.com/baiboy/p/python2.html

    總結(jié)

    以上是生活随笔為你收集整理的【Python五篇慢慢弹】数据结构看python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。