Python 變量之列表與應用技巧

  • 2020 年 1 月 10 日
  • 筆記

洛琳的筆記

Python 標準數據類型

      Python 定義了一些標準數據類型,用於存儲各種類型的數據。Python有五個標準的數據類型,分別是:

  • Numbers(數字)
  • String(字符串)
  • List(列表)
  • Tuple(元組)
  • Dictionary(字典)

       Python 中的變量賦值不需要類型聲明,也就是說聲明變量不需要使用關鍵字。Python 中變量賦值之後該變量就被創建。可以簡單對單一變量賦值,亦可對同一變量重新賦值(不同數據類型也可以),也可以同時為多個變量賦值,如下。

counter = 100 # 賦值整型變量  miles = 1000.0 # 浮點型  name = "John" # 字符串  ame = 100 # ame 被定義為新的數據類型  ame1 = ame2 = ame3 = 100 #此三個變量被同時定義和賦值

Python 數據類型之列表

      Python的變量靈活多變,不同的變量類型也有不同的使用技巧。上述的五種標準變量類型中string, list, tuple 都屬於序列(sequence)類型。Python內置共有6種序列類型變量,分別為:

str, unicode, list, tuple, buffer, xrange(range)

       其中只有一種可變序列類型,即List列表,其餘的如tuple和range(關於xrange和range的區別,我會在以後總結介紹,或者可以在百度知道搜索#python for in原理#參考我的回答)都屬於不可變的序列類型。這裡所謂的"變" (mutable)是說,在對象創建之後,可以通過一些操作改變其內部狀態,簡言之就是改變對象本身。因為最近的工作遇到了很多關於列表的問題,今天我就藉助這篇文章給大家介紹Python基本變量類型中的List,同時也給大家介紹一下List和Python內置函數相互配合的使用技巧。

Python 列表賦值與快速賦值

        Python 列表使用方括號「[ ]」, 元素之間用逗號「,」分隔。列表元素的數據類型不限,可以是各種數據類型的集合,這點要比其他編程語言方便。列表元素個數不限,理論上只要內存足夠大,元素個數就可以無限大。列表中的每個元素都分配一個數字作為索引,第一個索引值為0, 第二個為1,以此類推。List 列表普通賦值定義方法如下:

list1 = ['physics', 'chemistry', 1997, 2000]  list2 = [1, 2, 3, 4, 5 ]  list3 = ["a", "b", "c", "d"]

        然後就可以使用列表,但是在一些實際應用中需要初始化給定長度的列表,並對列表中每一個元素進行賦初值。如果列表長度在10以內,普通賦值依舊適用。如果列表長度過長,有可能需要寫個循環進行賦值。技巧:可以使用下列方法對列表進行賦值:

>>> list1 = [0] * 5 # 數字類型  >>> list1  [0, 0, 0, 0, 0]  >>> list2 = [""] * 8 # 字符串類型  >>> list2  ['', '', '', '', '', '', '', '']  >>> list3 = [None] * 9 # 空  >>> list3  [None, None, None, None, None, None, None, None, None]  >>> list4 = [True] *7 # 布爾類型  >>> list4  [True, True, True, True, True, True, True]

        該方法快速高效,可以對指定長度的列表進行快速初始化,弊端在於不能在限定元素的類型,但可以按序混合元素的數據類型,如下:

>>> list5 = [True, ""] * 3  >>> list5  [True, '', True, '', True, '']

Python 的列表索引,切片,改變與排序

        Python 的列表索引方式和其他編程語言相似,即使用列表變量名,方括號與索引值進行索引。但Python與其他語言相比又有獨特優勢。即在方括號中使用冒號「」+「數字」 對列表進行切片。切片可以理解為:取列表中指定的連續元素。如下:

>>> List1 = ['Google', 'Runoob', 'Taobao']  >>> List1[2] # 取第二個  'Taobao'  >>> List1[-1] # 取倒數第一個  'Taobao'  >>> List1[1:] # 取 從索引1至最後一個  ['Runoob', 'Taobao']  >>> List1[:2] # 取 從開始至索引2  ['Google', 'Runoob']

        Python 的列表是一個類的實例,也就意味着列表有自己的類方法。可以通過類方法對列表進行改變或者其他操作。常用類方法如下:

1    list.append(obj) # 在列表末尾添加新的對象  2    list.count(obj) # 某個元素在列表中出現的次數  3    list.extend(seq) # 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)  4    list.index(obj) # 從列表中找出某個值第一個匹配項的索引位置  5    list.insert(index, obj) # 將對象插入列表  6    list.pop(obj=list[-1]) # 移除列表中的一個元素(默認最後一個元素),並且返回該元素的值  7    list.remove(obj) # 移除列表中某個值的第一個匹配項  8    list.reverse() # 反向列表中元素  9    list.sort([func]) # 對原列表進行排序          在這裡我給大家介紹一下列表操作中,倒序排列(revers)和整理排序(sort)的應用技巧。整理排序時,默認情況下,數字列表排序規則為:由小到大;字符串列表排列規則:由「0」到「10」,然後由a到z;數字和字符串混合型列表排序規則為:先數字,後字符。請參考下方例子:>>> lt = ['a', 1, "c", 3, "b", 2]  >>> sorted(lt) # 使用內置方法  [1, 2, 3, 'a', 'b', 'c']  >>> lt  ['a', 1, 'c', 3, 'b', 2]  >>> lt.sort() # 使用類方法  >>> lt  [1, 2, 3, 'a', 'b', 'c']  >>>     注意,sort() 為數據類型列表的類方法,  sorted()為Python編程語言的內置函數。        由上述例子可知,使用Python內置函數,返回值為一個列表,使用列表的類方法則返回值為空。意思就是說:在整理排序時,內置函數不改變原始列表,而使用類方法則原始列表將發生變化。在處理某些問題的時候,我們需要保持原始列表不變,這時候就應該考慮,哪一種方法更合適。這樣的情況在倒序排列的時候也會發生,使用reverse()類方法時,雖然得到了倒序排列的列表,但是列表本身發生了變化,為了避免類似情況發生,備份一下原始列表是一種方法,但是會比較複雜。在這裡我給大家介紹一個實用技巧。我們可以通過一種特殊的列表切片方法直接生成出一個倒序排列的新的列表,請參考下方例子:>>> lt = ['a', 1, "c", 3, "b", 2]  >>> lt[::-1] # 採用切片法  [2, 'b', 3, 'c', 1, 'a']  >>> lt  ['a', 1, 'c', 3, 'b', 2]  >>> lt.reverse() # 採用類方法  >> lt  [2, 'b', 3, 'c', 1, 'a']        雖然python也有一個用於倒序排列的內置函數reversed(). 但是與sorted()函數不同,此函數返回值為一個列表迭(die)代器實例(iterator,以後的文章會詳細介紹迭代器)而非一個新的列表,所以說用類似「[::-1]」的列表切片更為合適。         Python編程語言還有一些其它的內置函數用於處理列表。比如:不同列表間比較cmp(list1, list2),獲取列表長度len(list),最大值max(list)最小值min(list),將元素變為列表list(seq)等。Tipp 1: 雖然list不是python的保留字符  可以用list作為變量名,而且不會產生錯誤。  但是還是不建議使用其作為變量名。    Tipp 2: 其實python還有其他的不經常用到  的內置函數:  用all(list)來檢查列表中是否所有元素都  為非空。  用any(list)來檢查列表中是否有任何一個  為空。    Python 列表數據類型轉換和應用技巧        列表數據轉換問題,一般分為兩種情況。列表中元素的數據類型轉換問題和整個列表數據類型轉換問題。         列表元素數據類型轉換,常見問題為數值類型和字符串類型間轉換。例如將列表中的數字化字符串元素轉換為數值類型元素,或反之; 或者將字符串列表的所有元素拼接,或反之。請參考下面例子。>>> ll = [1, 2.3, 3.4, 4.5, 5.6] # 將數值型轉換為字符  >>> ll  [1, 2.3, 3.4, 4.5, 5.6]  >>> map(str, ll)  ['1', '2.3', '3.4', '4.5', '5.6']  >>> ss = ['1', '2.3', '3.4', '4.5', '5.6']  # 將字符型轉換為數值型  >>> map(float, ss)  [1.0, 2.3, 3.4, 4.5, 5.6]  >>> tt = ["h", "e", "l", "l", "o"] # 元素拼合  >>> tt  ['h', 'e', 'l', 'l', 'o']  >>> "".join(tt)  'hello'  >>> st = "hello"  # 字符串拆分  >>> list(st)  ['h', 'e', 'l', 'l', 'o']       列表整體式地數據類型轉換,常見問題:將列表整體轉換為一個字符串和將一個字符串中的列表部分轉換為一個列表。第一種情況請參考下方例子:>>> ss = ['a', 1, 'c', 3, 'b', 2]  >>> ss  ['a', 1, 'c', 3, 'b', 2]  >>> str(ss)  "['a', 1, 'c', 3, 'b', 2]"可以看出只需要使用python的內置方法str()就實現。可是如果是第二種情況呢?如果要將字符串化的列錶轉換為一個列表,千萬不要使用內置函數list()。因為不會得到預期的結果,這裡要使用內置函數eval()。參考下方代碼:>>> st = "['a', 1, 'c', 3, 'b', 2]"  >>> list(st) # 若使用list函數  ['[', "'", 'a', "'", ',', ' ', '1', ',', ' ', "'", 'c', "'", ',', ' ', '3', ',', ' ', "'", 'b', "'", ',', ' ', '2', ']']  >>> eval(st) # 若使用eval函數  ['a', 1, 'c', 3, 'b', 2]       Python基本數據類型中的List列表和列表的使用技巧今天就介紹到這裡。想比大家都有這樣的印象:如果能合理並巧妙地使用python內置函數來處理列表,將能夠大大減少代碼數量和提高代碼質量。如果大家有別的想法或者其他使用技巧。歡迎訂閱我的個人微信公共號,留言分享。    請長掃描二維碼訂閱我的個人微信公眾號。原創不易,多多點贊分享支持。