1. 程式人生 > >第013講:元組:戴上了枷鎖的列表 | 學習記錄(小甲魚零基礎入門學習Python)

第013講:元組:戴上了枷鎖的列表 | 學習記錄(小甲魚零基礎入門學習Python)

(標答出處: 魚C論壇)
《零基礎入門學習Python》

在這裡插入圖片描述

測試題:

  1. 請用一句話描述什麼是列表?再用一句話描述什麼是元組?

    列表:類似於一個倉庫,可以往其中儲存東西,當然也可以向其中增加或者刪除東西;
    元組:類似於一個保險箱,但是和保險箱不同的是,當你向其中存入資料後,保險箱的鎖就會徹底鎖死,也就 是無法向其中增加或者刪除元素。

  2. 什麼情況下你需要使用元組而不是列表?

    當儲存的東西不允許被修改的時候,比如說賬戶的身份認證資訊

  3. 當元組和列表掉下水,你會救誰?

    列表。因為元組是不可以改變的,所以泡水了也不會改變元組中的數值,而列表不一樣,列表中的資料可以進行修改,所以要先救列表。

  4. 建立一個元組,什麼情況下逗號和小括號必須同時存在,缺一不可?

    在拼接只有一個元素的元組的時候,

  5. x, y, z = 1, 2, 3 請問x, y, z是元組嗎?

    不是

  6. 請寫出以下情景中應該使用列表還是元組來儲存資料:

  1. 遊戲中角色的屬性:列表

  2. 你的身份證資訊:元組

  3. 論壇的會員:列表

  4. 團隊合作開發程式,傳遞給一個你並不瞭解具體實現的函式的引數:列表

  5. 航天火箭各個元件的具體配置引數:元組

  6. NASA系統中記錄已經發現的行星資料:列表

  1. 上節課我們通過課後作業的形式學習到了“列表推導式”,那請問如果我把中括號改為小括號,會不會得到“元組推導式”呢?
    不會

標答

  1. 請用一句話描述什麼是列表?再用一句話描述什麼是元組?

    列表:一個大倉庫,你可以隨時往裡邊新增和刪除任何東西。

    元組:封閉的列表,一旦定義,就不可改變(不能新增、刪除或修改)。

  2. 什麼情況下你需要使用元組而不是列表?

    當我們希望內容不被輕易改寫的時候,我們使用元組(把權力關進牢籠)。

    當我們需要頻繁修改資料,我們使用列表。

  3. 當元組和列表掉下水,你會救誰?

    如果是我,我會救列表,因為列表提供了比元組更豐富的內建方法,這相當大的提高了程式設計的靈活性。

    回頭來看下元組,元組固然安全,但元組一定建立就無法修改(除非通過新建一個元組來間接修改,但這就帶來了消耗),而我們人是經常搖擺不定的,所以元組只有在特殊的情況才用到,平時還是列表用的多。

    綜上所述,小甲魚會救列表(列表是美眉)。

  4. 請將左邊列表的內建方法與右邊的註釋連線,並圈出元組可以使用的方法。

    看吧,元組果然比較悲劇吧,僅有兩個方法元組可以使用,其他方法都不行,不信你試試?

  5. 建立一個元組,什麼情況下逗號和小括號必須同時存在,缺一不可?

    在拼接只有一個元素的元組的時候,例如我們課上舉的例題:

	>>> temp = (‘小甲魚’, ‘黑夜’, ‘迷途’, ‘小布丁’)
	# 如果我想在“黑夜”和“迷途”之間插入“怡靜”,我們應該:
	>>> temp = temp[:2] + (‘怡靜’,) + temp[2:]
  1. x, y, z = 1, 2, 3 請問x, y, z是元組嗎?

所有的多物件的、逗號分隔的、沒有明確用符號定義的這些集合預設的型別都是元組,自己在IDLE中鍵入以下程式碼,並體會一下:

x, y, z = 1, 2, 3
type(x)
h = x, y, z
type(h)

  1. 請寫出以下情景中應該使用列表還是元組來儲存資料:

    1. 遊戲中角色的屬性:列表

    2. 你的身份證資訊:元組

    3. 論壇的會員:列表

    4. 團隊合作開發程式,傳遞給一個你並不瞭解具體實現的函式的引數:元組

    5. 航天火箭各個元件的具體配置引數:元組

    6. NASA系統中記錄已經發現的行星資料:列表

  2. 上節課我們通過課後作業的形式學習到了“列表推導式”,那請問如果我把中括號改為小括號,會不會得到“元組推導式”呢?自己動手試試看再看答案哦_

    Python3 木有“元組推導式”,為嘛?沒必要丫,有了“列表推導式”已經足夠了。

    那為什麼“>>> tuple1 = (x**2 for x in range(10))”不會報錯?

    因為你誤打誤撞得到了一個生成器:

>>> type(tuple1)
	<class 'generator'>

關於生成器的概念小甲魚今後會細講,你可以嘗試這麼去訪問我們剛剛的生成器:

注意,Python3 開始 next() 方法改為 next() 哦~

>>> tuple1.__next__()
	0
>>> tuple1.__next__()
	1
>>> tuple1.__next__()
	4
>>> tuple1.__next__()
	9
>>> tuple1.__next__()
	16
>>> tuple1.__next__()
	25
>>> tuple1.__next__()
	36