發表文章

目前顯示的是 3月, 2018的文章

Python可以這樣玩(4):元組字典與集合

元組與生成器推導式 元組也是 Python 一種重要的序列結構,從形式而言,元組的所有元素放在一對小括號中,元素之間以逗號分隔。如下: >>> x = (1,2,3) >>> x (1, 2, 3) >>> type(x) <class 'tuple'> >>> x = (3) >>> x 3 >>> type(x) <class 'int'> >>> x = (3,) >>> x (3,) >>> type(x) <class 'tuple'> >>> x = () >>> x () >>> tuple(range(5)) (0, 1, 2, 3, 4) >>>   元組屬於不可變序列,與列表不同。而 Python 對原組做了大量最佳化,因此,存取和處理的速度比列表更快。 另外,作為不可變序列,元組與整數、字串一樣,可以當成字典的鍵,有關字典的部分,我們後面說明。 雖然元組是不可變序列,但是如果其內部包含了可變序列,情況就複雜了: >>> x = ([1,2],3) >>> x[0][0] = 5 >>> x ([5, 2], 3) >>>   元組的生成器推導式與列表推導式非常類似,主要的差異在於,生成器推導式的結果是一個生成器物件,而非元組。不像列表推導式生成的就是列表。生成器物件可以依照我們的需求產生元組或是列表,還有一個特性就是生成器推導式會用 __next__() 方法來巡訪元素,而且當巡訪結束之後,就巡訪不到元素了。請看下面的範例: >>> g = ((i + 2)**2 for i in range(10)) >>> g <generator objec

Python可以這樣玩(3):Python 序列

圖片
首先說明一下,本文章首頁出現的照片,只是預告一下後面關於 Arduino 的課程,與本文無關。所有的電路程式設計,都可以由 Python 達成。 Python 的序列類似 C 或 Basic 語言的一維與多維陣列,但功能要強大許多,使用上也更加靈活。 Python 常用的序列結構有列表、元組、字典、字串、集合等等,大致可以分為有序與無序兩類:其中列表、元組、字串屬於有序序列 ( 有順序的 ) ,字典、集合屬於無序序列。前一個章節有討論過列表、字串、集合三個,但是在這裡會更深入的討論。 對於有序序列而言,都會支援雙向索引,第一個元素的索引為 0 ,第二個元素的索引為 1 ,依此類推。反向的話,倒數第一個元素的索引為 -1 ,倒數底二個元素的索引為 -2 ,依此類推。使用負整數作為索引是 Python 序列的一大特色,熟練之後,可以大幅提升開發效率。 列表 (List) 與列表推導式 列表在上一章節有簡單介紹過,是 Python 內建重要的可變序列之一,它是包含若干元素的有序連續記憶體空間。形式上,列表的所有元素放在一對中括號裡面,相鄰的元素之間以逗點分開。 在 Python 中,同一個列表中元素的資料類型可以不一樣,例如可以分別為整數、實數、字串等基本資料類型,或者是列表、元組、字典、集合以及其他自訂類型的物件。下面幾種都是合法的列表物件: 隨堂練習 玩擲骰子遊戲,一次值四個骰子,共擲三次 請問如何用列表表示? >>>   列表 (List) 的建立與刪除 以 = 直接將列表賦予值給變數,即可建立列表物件,例如: >>> a_list = [1, 2, 3, 4, 5] >>> a_list [1, 2, 3, 4, 5] >>> b_list = []        # 空值 >>> b_list [] >>>   也可以使用 list() 函數將元組、 range 物件、字串、字典、集合等資料類別轉換為列表,請先看下面的例子: 字典比較特殊,如果直接用 list() 轉換,只會轉換鍵,如果要