在python中,包括我們之前已經講過列表、元組及字符串的一些用法了,大家應該可以感覺到,這三種「數據類型」還是有很多相同之處的,所以python中也可以輕易的實現三種類型之間的轉換,當然本篇文章還會補充和它們相關的一些方法。
8.1 轉換為列表方法–list()list這個單詞我們在講列表的時候已經很熟悉了,因為定義一個列表時經常是:
list1 = [1, 2, 3, 4, 5]list2 = [6, 7, 8, 9 ,10]建立一個空列表時也是:
結果:
所以給列表起名為「list1」、「list2」不是沒理由的,但是在這裡,list()又變成了一種方法,他的作用是可以將一個「可迭代對象」轉換為列表,關於迭代,我在一本書上看到了一個比較好理解的說法:所謂迭代,就是重複反饋的過程,其目的通常是為了接近並達到所需的結果。每一次對過程的重複就是一次「迭代」,而每一次迭代得到的結果都會被用來作為下一次的初始值進行下一次「迭代」,所以迭代一般都是反覆重複的過程,當然for循環也是一種迭代。
當list()內沒有參數時就是建立一個空列表,如果在裡面加一個「字符串」參數呢,我們試一下:a = "HopesLi"b = list(a)print(b)結果:
['H', 'o', 'p', 'e', 's', 'L', 'i']是不是很神奇?通過list()方法可以直接將字符串的每一個字符拆分開,然後按照順序排列在列表裡,要知道,這種操作在C語言裡可沒這麼簡單;所以這個list()方法一定要記住。
8.2 轉換為元組方法–tuple()上面我們講了講「可迭代對象」轉換為列表的方法–list(),那這裡轉換為元組的方法其實也大相逕庭,我們也肯定知道定義一個空元組的方式:
結果:
所以同樣可以使用tuple()來將一個「字符串」轉換為元組:
a = "HopesLi"b = tuple(a)print(b)結果:
('H', 'o', 'p', 'e', 's', 'L', 'i')所以輕易可以看出來tuple()和list()的轉換效果基本是一樣的。
8.3 轉換為字符串方法–str()說到str(),我們肯定能想到int()、float()等強制類型轉換的用法,當然,list()和tuple()感覺也是一種強制類型轉換,那這裡我們類比一下,既然a = list() 和 b = tuple()分別是定義一個空列表和一個空元組,那麼c = str()是不是就代表定義一個「空字符串」?這個說法還挺新奇,當然我們可以試一下到底對不對:
a = str()print(a)print(type(a))結果:
可以看出來,確實和我們想的一樣,c = str()確實是定義了一個「空字符串」,但是這樣並沒有啥意義,所以就鮮有人提起;那麼同樣的,我們是不是也可以把字符串或元組轉換為字符串呢?同樣我們也進行嘗試:
a = [1,2,3]b = str(a)print(b)print(type(b))結果:
我們這裡可能會有個大大的問號,顯然通過type獲得的數據類型為「字符串」類型是可以理解的,但是為啥輸出結果還是「[1,2,3]」呢?不妨我們把當前的「b」再轉換回列表試試:
a = [1,2,3]b = str(a)print(b)
c = list(b)print(c)結果:
[1, 2, 3]['[', '1', ',', ' ', '2', ',', ' ', '3', ']']怎麼樣?是不是可以理解了,上面輸出的「[1,2,3]」其實把每一個符號或數字都變成了字符串中的字符,當我們再將它轉換回列表後就能發現每一個符號和數字都被當成了一個列表中的「元素」,好好理解一下。
8.4 取最大值方法–max()max()方法的作用是返回一個列表或者元組等集合中的最大值,當然,max()內的參數可以是列表、元組也可以是某些數的集合,非常簡單,舉例說明:
a = [2, 4, 7, 4, 5]print(max(a))
b = (3, 8, 9, 2, 4)print(max(b))
print(max(4, 8, 9))結果:
結果很明顯,我們不再贅述。
8.5 取最小值方法–min()min()方法的作用就很明顯了,返回一個列表或者元組等集合中的最小值,用法和max()方法一樣,直接舉例說明:
a = [2, 4, 7, 4, 5]print(min(a))
b = (3, 8, 9, 2, 4)print(min(b))
print(min(4, 8, 9))結果:
同樣用法非常簡單,但是會不會有人想問:如果是不同類型的參數進行比較結果會是怎樣。?我們不妨試一試:
a = [1, "hopes", 4, "li"]print(min(a))結果:
Traceback (most recent call last): File "test.py", line 2, in <module> print(min(a))TypeError: '<' not supported between instances of 'str' and 'int'結果給我們的錯誤信息很明顯:「not supported between instances of 『str』 and 『int』」,這代表str和int類型的數據不能夠相互比較,也就代表不管是max()還是min(),它們都只能進行相同數據類型的比較。
8.6 獲得參數長度方法–len()len()方法用於返回給定參數的長度,比如:
str1 = "HopesLi"print(len(str1))
list1 = [1,2,3]print(len(list1))
tuple1 = (2,3,4,5)print(len(tuple1))結果:
同樣用法非常明顯。
8.7 求和方法–sum()sum()用於返回參數的總和,參數可以為列表、元組以及集合等,但是既然是可以相加的方法,那麼不管是列表、元組還是集合內的元素都需要為可加的數字類型,同樣舉例說明:
a = [1,3,4]print(sum(a))
print(sum(a,5))結果:
當然如果我們嘗試把字符串類型加入進行求和呢?
a = [1,3,4,"hopes"]print(sum(a))結果:
Traceback (most recent call last): File "test.py", line 2, in <module> print(sum(a))TypeError: unsupported operand type(s) for +: 'int' and 'str'錯誤信息提示「unsupported operand type(s) for +: 『int』 and 『str』」不能夠將int類型和str類型進行相加(其實都不用試,這是肯定的)。
8.8 排序方法sorted()sorted()方法用於返回一個排序好的列表或元組,但只能是一個參數,不能把一些數的集合當作參數,舉例說明:
a = (2,5,3)print(sorted(a))結果:
看到這個結果發現問題了沒有,我明明定義的a是一個元組,但是為什麼排序輸出後是一個列表?沒錯,這確實是sortes()和sort()方法的區別,sort()是直接原地排序,但是sorted()卻是返回一個排序好的「新列表」,也就是說sorted()方法在執行後後自己分配一個內存空間用來存儲排序好的新列表。
那接下來我們試一下使用sorted()方法排序多個數字組成的集合會是怎樣?結果:
Traceback (most recent call last): File "test.py", line 2, in <module> print(sorted(3,5,2))TypeError: sorted expected 1 argument, got 3錯誤信息提示我們「sorted expected 1 argument, got 3」只能傳入1個參數,但我們卻給了3個,所以我們這裡確定,排序只能傳入一個參數,可以是列表、元組等。
8.9 生成二元組方法enumerate()enumerate()方法用於生成一個由二元組組成的迭代對象,注意,這裡返回的是一個迭代對象,迭代對象是啥樣的?我們試一下:
str1 = "hopes"print(enumerate(str1))結果:
<enumerate object at 0x10e96a800>如上,迭代對象貌似只是一個「代號」,我們從中好像並不能直接獲取什麼信息,所以迭代對象我們需要通過for循環將其進行遍歷:
str1 = "hopes"print(enumerate(str1))for i in enumerate(str1): print(i)結果:
<enumerate object at 0x10f30c840>(0, 'h')(1, 'o')(2, 'p')(3, 'e')(4, 's')看吧,我們通過enumerate()方法將str1的所有字符拆分並且以二元組的形式顯示出來了,並且我們也明白了一件事:迭代對象需要使用for循環進行「拆包」。