簡介
Python的主要應用是進行科學計算,科學計算的基礎就是數字,字串和列表。本文將會詳細的給大家介紹一下這三個資料型別的使用情況。
數字數字是任何科學計算中非常中要的型別,在Python中最常見的數字型別就是int和float。
看幾個基本的數字操作:
In [8]: 1+1Out[8]: 2In [9]: 3*2 + 10Out[9]: 16In [10]: (65 + 23) / 4Out[10]: 22.0
上面我們可以看到,沒有小數的是int型別,帶有小數的是float型別。
除法運算 (/) 永遠返回浮點數型別。如果要做 floor division得到一個整數結果(忽略小數部分)你可以使用 // 運算子;如果要計算餘數,可以使用 %
In [11]: 54 / 4Out[11]: 13.5In [12]: 54 // 4Out[12]: 13In [13]: 54 % 4Out[13]: 2
** 可以表示乘方運算:
In [14]: 4 ** 3Out[14]: 64
我們可以將數字的運算賦值給特定的變數,並且可以使用該變數進行後續的運算。
In [15]: a = 12In [16]: b = 14In [17]: a * bOut[17]: 168
在互動式環境中,_表示上一個輸出:
In [17]: a * bOut[17]: 168In [18]: 100 + _Out[18]: 268
除了int和float,Python還支援其他的資料型別,比如Decimal和Fraction,甚至還支援複數。
字串Python中字串有三種表示形式,可以使用單引號,雙引號和三引號來表示。
In [19]: site1 = 'www.flydean.com'In [20]: site2= "www.flydean.com"In [21]: site3= """www.flydean.com"""
三引號主要用於跨行輸出,字串中的回車換行會自動包含到字串中,如果不想包含,在行尾新增一個 \ 即可。如下:
print("""\Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to""")
如果需要轉義的話,可以使用反斜槓 \
In [22]: site4 = "www.\"flydean\".com"In [23]: site4Out[23]: 'www."flydean".com'
如果你不希望前置了 \ 的字元轉義成特殊字元,可以使用 原始字串 方式,在引號前新增 r 即可:
In [24]: print(r"www.\"flydean\".com")www.\"flydean\".com
字串透過 + 來進行連線,也可以使用 * 來進行復制:
In [25]: "www" + "flydean.com"Out[25]: 'wwwflydean.com'In [26]: "www.flydean.com" * 3Out[26]: 'www.flydean.comwww.flydean.comwww.flydean.com'
相鄰的兩個或多個 字串字面值 (引號引起來的字元)將會自動連線到一起.
In [27]: "www" "flydean.com"Out[27]: 'wwwflydean.com'
注意,上面的自動連線操作,只能對兩個字面量有效,如果是變數的話則會報錯。
字串會被看做是由字元組成的陣列,所以可以透過string[index]的形式來進行訪問。
In [28]: site5 = "www.flydean.com"In [29]: site5[3]Out[29]: '.'
如果索引是負數的話,會從右邊開始計數:
In [30]: site5[-3]Out[30]: 'c'
因為-0 和 0 是一樣的,所以負數是從 -1 開始的。
除了索引,字串還支援 切片。索引可以得到單個字元,而 切片 可以獲取子字串:
In [31]: site5[1:5]Out[31]: 'ww.f'
注意切片的開始總是被包括在結果中,而結束不被包括。這使得 s[:i] + s[i:] 總是等於 s
In [33]: site5[:4]+site5[4:]Out[33]: 'www.flydean.com'
切片的索引有預設值,省略開始索引時預設為0。
如果索引超出了字串的範圍就會發送越界錯誤。
In [34]: site5[100]---------------------------------------------------------------------------IndexError Traceback (most recent call last)<ipython-input-34-fc1f475f725b> in <module>()----> 1 site5[100]IndexError: string index out of range
但是,切片中的越界索引會被自動處理:
In [36]: site5[:100]Out[36]: 'www.flydean.com'
因為字串是不可變的,所以我們不能透過索引的形式來對字串進行修改:
In [37]: site[2] = "A"---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-37-9147d44bd80c> in <module>()----> 1 site[2] = "A"TypeError: 'str' object does not support item assignment
len用來統計字串的長度:
In [38]: len(site5)Out[38]: 15
字串物件str
字串的本質是字串物件str。
可以看下str的基本方法:
In [39]: site5. capitalize() encode() format() isalpha() islower() istitle() lower() replace() rpartition() splitlines() title() casefold() endswith() format_map() isdecimal() isnumeric() isupper() lstrip() rfind() rsplit() startswith() translate() center() expandtabs() index() isdigit() isprintable() join() maketrans() rindex() rstrip() strip() upper() count() find() isalnum() isidentifier() isspace() ljust() partition() rjust() split() swapcase() zfill()
感興趣的同學可以自行去研究。
列表列表是用方括號表示的資料的集合。列表中的資料可以是多種資料型別,但是一般情況下,我們在一個列表中使用同一個資料型別。
In [40]: ages = [ 10, 14, 18, 20 ,25]In [41]: agesOut[41]: [10, 14, 18, 20, 25]
和字串一樣,列表也支援索引和切片。事實上,只要是 sequence 型別的資料型別,都支援索引和切片。
In [42]: ages[3]Out[42]: 20In [43]: ages[:2]Out[43]: [10, 14]In [44]: ages[:]Out[44]: [10, 14, 18, 20, 25]
注意,列表的切片會返回一個新的列表。但是這個新的列表是淺複製,意味著新列表的元素是原列表中元素的引用。
列表還支援拼接操作:
In [45]: ages + [9, 11]Out[45]: [10, 14, 18, 20, 25, 9, 11]
和String的不可變性不同,列表是可變的,這就意味著我們可以透過索引來修改列表的值:
In [46]: ages[0] = 100In [47]: agesOut[47]: [100, 14, 18, 20, 25]
列表的底層型別是list,我們可以看下list中的方法:
In [51]: ages. append() count() insert() reverse() clear() extend() pop() sort() copy() index() remove()
我們可以使用append來附加list的值,也可以使用count來統計list的元素個數等等。
上面我們提到了,列表的切片是原列表的引用,所以我們可以透過給切片賦值,來修改原始列表的值:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']>>> letters['a', 'b', 'c', 'd', 'e', 'f', 'g']>>> # replace some values>>> letters[2:5] = ['C', 'D', 'E']>>> letters['a', 'b', 'C', 'D', 'E', 'f', 'g']>>> # now remove them>>> letters[2:5] = []>>> letters['a', 'b', 'f', 'g']>>> # clear the list by replacing all the elements with an empty list>>> letters[:] = []>>> letters[]
列表還可以進行巢狀,構建多層的列表:
>>> a = ['a', 'b', 'c']>>> n = [1, 2, 3]>>> x = [a, n]>>> x[['a', 'b', 'c'], [1, 2, 3]]>>> x[0]['a', 'b', 'c']>>> x[0][1]'b'
本文已收錄於 http://www.flydean.com/03-python-number-list-string/
最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!