[18] Python元組

1. 概述

終於結束循環了,我們來補充剩下的數據結構,除了數字、字元串和列表以外,我們還有元組、集合和字典。

  • 計算機編程的原理簡要介紹
  • 集成開發環境PyCharm
  • 變數名、數字、字元串、列表
  • 句式、注釋
  • 輸入和輸出
  • 條件判斷語句
  • 循環語句
  • 各類數據結構
  • 函數
  • 模塊和引入

2. 數據類型

Python是代碼,用於計算機處理數據,不同的數據有不同的類型,比如數字和列表就是兩種不同的數據。Python的幾種基本的數據類型有:

  1. 數字(number)
  2. 字元串(string)
  3. 布爾型(boolean)
  4. 列表(list)
  5. 元組(tuple)
  6. 字典(dictionary)

其他的還有集合(set)、範圍(range)等,我們可以看到我們尚未接觸到的只有元組、字典和集合三種,我們會在這裡給大家一一介紹。當然,進階的還有隊列、棧、鏈表、樹等等,這個我們暫且不需要了解,很久以後才會介紹。

3. 序列

序列(sequence),顧名思義,就是一個按序排列下來的數據類型,這在上面沒有提到,常見的序列類型包括這些:

  1. 列表:已提及,列表是把一串數據排列起來,和我們口頭上說的列表一樣,注意列表是屬於可變類型(mutable)的,意思是,列表可以添加元素、刪除元素、修改元素或者任意交換順序。
  2. 範圍:已提及,就是一串已經事先定義好的整數列,按照規律排列下來。
  3. 元組:長得和列表很像,但是和列表的區別在於,其為不可變類型(immutable)。我們馬上來看元組的特殊之處。

4. 元組

元組(tuple)是一串按序排列的數據,用小括弧表示。

tuple1 = (data1, data2, data3, ...)

和列表很像,但不一樣的是,列表裡面可以添加刪除修改交換數據,元組一旦定義了,就不能隨便修改了。其實在我剛學Python的時候,我覺得元組這東西非常奇怪,不過後來我開始把它當作一個可以存任何值的坐標點,一下子就清晰明了。比如:

point1 = (3, 4, 5)point2 = (-1, 0, 3)

這麼一看元組的特性就清晰明了,如果我們添加或刪除一個數,元組就不再屬於三維坐標系,如果我們修改或者交換裡面的元素,元組就和一開始表示的點不同。

接下來我們就從如何定義元組。

5. 定義元組

很簡單,用小括弧就行了,就把它想成一個坐標,只不過坐標裡面能存各種數據類型。

# Define tuplest1 = (1, 2, 3, "Hello!")t2 = ([1, 2, 3], [2, "A", "b"], 21.1)

這個一看就是元組,有小括弧括著,偷懶的方法就直接把小括弧去了,主要看程序員習慣:

# Define tuplest3 = 1, 2, 3, "Hello!"t4 = [1, 2, 3], [2, "A", "b"], 21.1

6. 使用元組

由於元組是個不可變的列表,那麼在不改變其值的情況下,我們還是可以和列表一樣訪問裡面的每個元素。

# Define tuplest1 = (1, 2, 3, "Hello!")t2 = ([1, 2, 3], [2, "A", "b"], 21.1)# Print out every element manually in t1print("Result of t1:")print(t1[0], t1[1], t1[2], t1[3])# Print out each element in t2 using loopsprint("Result of t2:")for element in t2: print(element)

最後結果長這樣:

Result of t1:1 2 3 Hello!Result of t2:[1, 2, 3][2, "A", "b"]21.1

這裡和列表的操作完全一樣,而且元素的數據類型不限,可以看到在t2里,第一個和第二個元素都是列表,第三個元素是浮點數。

如果我們要修改元組的數據,比如這樣,是要報錯的!也就是說元組一旦定義值就被鎖死。

### t1[0] = 999 #TypeError!

如果我們要使用元組裡面的數據,我們可以通過拆解元組來獲得值並賦給其他變數,然後進行各種計算。

point1 = (3, 4, 5)point2 = (-1, 0, 3)# Assign value to new variablesx1, y1, z1 = point1x2, y2, z2 = point2# Calculate distance between two pointsdelta_x = x2 - x1delta_y = y2 - y1delta_z = z2 - z1distance = (delta_x ** 2 + delta_y ** 2 + delta_z ** 2) ** 0.5print(distance)

我們可以看到,point1和point2括弧里的三個值被分別一一對應地賦值給了x、y和z,也就是x1、y1、z1分別為3、4、5,且x2、y2、z2分別為-1、0、3。我們就直接把元組給拆了,其中每個元素都能被單獨拿出來使用。

這也對應了我們在「Python變數」里提到的一個賦值方法:

d, e, f, g, h = 1998, 98, 9.8, "Surprise!", 9999.98

這是當時我們舉的例子,其實這也可以理解為等號右邊定義了一個元組(記住元組定義的時候有沒有小括弧都行),然後再一一拆解並對應著賦值給左邊的五個變數。

7. 元組運算符和內置函數

元組的運算符和內置函數,和列表很相似,常見的有:

+:(1, 2, 3) + (4, 5, 6) --> (1, 2, 3, 4, 5, 6)*:(4, 5) * 3 --> (4, 5, 4, 5, 4, 5)len(tuple): 計算出該元組裡元素數量in: 判斷數據是否在元組中 2 in (1, 2, 3) --> True 4 in (1, 2, 3) --> False

想把其他數據轉換成元組,比如把列表和範圍轉換為元組,用tuple()函數,括弧里放上數據。

l = [1, 2, 3, 4, 5]r = range(5)# Convert to tuplet_from_l = tuple(l)t_from_r = tuple(r)print(t_from_l, t_from_r)# (1, 2, 3, 4, 5) (0, 1, 2, 3, 4)

8. 空元組和單元素元組

定義一個空元組,只需要一個括弧就行,或者用tuple()也行

empty1 = ()empty2 = tuple()

但是如果要定義一個單元素元組,我們需要注意:

singleton1 = "python",singleton2 = ("python",)

最後一定要跟一個逗號,以便於告訴Python你定義的是元組而不是字元串,即便有小括弧,也要最後拖個逗號,因為小括弧在Python中也時常被用作數學操作,有了逗號就能區分到底是用於數學還是元組。

9. 數據的賦值與修改

我們也講到了元組一旦定義是不可修改的,如果要硬改元組的值,我們可以重新賦值:

tuple1 = (1, 2)tuple1 = (-1, 2)

這種情況下tuple1的值就被改掉了,但這嚴格意義上是重新賦值,是用一個新值去覆蓋舊值,而元組不可變的意思是我們不能對其內容進行直接修改,就比如造一棟不可變的樓,我們造完之後就不能進行任何形式的修繕改造,如果要改造,則必須要把樓全部推到,重新建造。可以說元組作為一個不可變的列表,對於一個序列的數據提供了一個較為完整的約束。


推薦閱讀:

如何看待微軟 Pyjion 的進展以及 CPython 性能優化的未來?
安卓運行Python的神器:QPython
Python中你可能不知道的platform
Kaggle HousePrice : LB 0.11666(前15%), 用搭積木的方式(2.實踐-特徵工程部分)

TAG:Python | 计算机科学 | 编程 |