宣告:在人工智慧技術教學期間,不少學生向我提一些python相關的問題,所以為了讓同學們掌握更多擴充套件知識更好的理解人工智慧技術,我讓助理負責分享這套python系列教程,希望能幫到大家!由於這套python教程不是要由所寫,所以不如我的人工智慧技術教學風趣幽默,學起來比較枯燥;但它的知識點還是講到位的了,也值得閱讀!
今天介紹乙個python的高階操作——列表解析表示式(list comprehension expression),它提供了一種處理像矩陣這樣結構的強大工具。例如,假設我們需要從矩陣中提取出第二列。因為矩陣是按照行進行儲存的,所以通過簡單的索引即可獲取行,要想簡單地獲得列那麼就要使用列表解析表示式。下面就用列表解析表示式獲取了第二列的所有元素。
>>> col2 = [row[1] for row in m] # collect the items in column 2
>>> col2
[2,5,8]
>>> m # the matrix is unchanged
[[1,2,3],[4,5,6],[7,8,9]]
列表解析源自集合的概念。它是一種通過對序列中的每一項執行乙個表示式來建立乙個新列表的方法,每次乙個,從左至右。列表解析是編寫在方括號中的,並且由使用了同乙個變數名(上面的變數名是row)的表示式和迴圈結構組成。上面的**的意思就是:「把矩陣m的每個row中的row[1],放在乙個新的列表中」。其結果就是乙個包含了矩陣的第二列的新列表。實際應用中的列表解析可以更複雜:
>>> [row[1] + 1 for row in m] # add 1 to each item in column 2
[3,6,9]
>>> [row[1] for row in m if row[1] % 2 == 0] # filter out odd items
[2,8]
例如,這裡的第乙個操作,把它蒐集到的每乙個元素都加了1,第二個使用了乙個if條件語句,通過使用%求餘表示式(取餘數)過濾了結果中的奇數。
下面第乙個操作取出矩陣m中i索引對應的元素。第二個操作將字串的每個字母複製乙份:
>>> diag = [m[i][i] for i in [0,1,2]] # collect a diagonal from matrix
>>> diag
[1,5,9]
>>> doubles = [c * 2 for c in 'spam'] # repeat characters in a string
>>> doubles
['ss','pp','aa','mm']
列表解析以及相關的內容函式map和filter比較複雜,就不過多講述了。這裡簡要說明的目的是要告訴大家python中有簡單的工具,也有高階的工具。列表解析是乙個可選的特性,在實際應用中比較方便,並常常具有處理速度上的優勢。
python系列教程 python系列教程
宣告 在人工智慧技術教學期間,不少學生向我提一些python相關的問題,所以為了讓同學們掌握更多擴充套件知識更好的理解人工智慧技術,我讓助理負責分享這套python系列教程,希望能幫到大家!由於這套python教程不是要由所寫,所以不如我的人工智慧技術教學風趣幽默,學起來比較枯燥 但它的知識點還是講...
python系列教程3
python唯一的缺點就是,在目前現有的實現方式下,與c和c 這類編譯語言相比,python的執行速度還不夠快。教程後面將對實現方式的概念進行詳細闡述。簡而言之,目前python的標準實現方式是將源 的語句編譯 或者說是轉換 為位元組碼的形式,之後再將位元組碼解發布來。由於位元組碼是一種與平台無關的...
Python系列教程19
開啟文字編輯器 例如,vi notepad或idle編輯器 並在命名為script1.py的新文字檔案中輸入如下python語句 a first python script import sys load a library module print sys.platform print 2 100...