前一段時間因為工作的需要在Java中呼叫Python指令碼,自己之前對Python只是停留知道有這種語言基礎上,所以自己看的一臉懵逼,為了更高效的工作,自己決定就學習一下,本人也是邊學邊做記錄,如果哪有了解不到位的還望各位指正。
今天首先看看Python中的序列,Python中有六中內建的序列,分別是列表(list)、元組、字串、Unicode字串、buffer物件、xrang物件。
1:序列的通用操作
Python中所有序列都有一些通用的操作,如引索、分片、加、乘、成員資格檢查操作。
1.1:引索
我們可以通過引索來訪問序列中某個元素的值,譬如:
mString = "python"
print(mString[0])
print(mString[1])
print(mString[3])
print(mString[-1])複製程式碼
和其他語言一樣,引索的值是從0開始,第一個元素的下標是0,不過需要注意的是Python允許元素的引索可以是負值,負數的時候元素從右邊開始計算,-1表示右邊第一個元素,-2表示倒數第二個元素,Java中就不允許引索為負值的情況出現。
2.2 切片
Python中的切片有點類似Java字串的擷取功能,但是也不完全相同,引索每次只能訪問一個元素,切片每次可以訪問一定範圍的元素,切片中使用冒號來分割兩個引索。
使用切片來獲取一個序列的一部分元素
# utf-8
mString = "python"
# 序列的切片操作
print(mString[0:3]) # pyt複製程式碼
從上面的例子中可以看出,切片操作是一個“左閉右開”的操作,就是它會包含左邊引索的值,卻不包含右邊的引索的值,那我們怎麼訪問最後一個元素呢,
# 切片訪問序列的最後一個元素
print(mString[0:10]) #python
print(mString[1:]) #ython
print(mString[:]) #python
# 第一個引索必須小於第二個引索
print(mString[3:1]) #複製程式碼
發現Python切片操作中元素的引索不會越界,當大於序列引索的時候返回最後一個元素的值,因此我們可以使用這個特新來訪問最後一個元素,第二種方式就是右邊元素的引索我們不寫,Python預設會返回最後一個元素的值,如果兩個引索都不寫會返回整個字串的值,在使用切片的時候第一個引索的值必須小於第二個引索的值。
更改切片的步長,上面看到切片的操作預設的步長是1,我們可以顯示的指定步長,
# 顯示的指定步長
print(mString[1:6:2]) #yhn複製程式碼
我指定切片的步長為2,它會每個2個元素取一個值,注意設定步長不能為0
2.3:序列的加操作
序列的加操作使用加號(+)操作就可以
# 序列的加操作
print([1,2]+[3,4,5]) #[1, 2, 3, 4, 5]複製程式碼
只有兩種相同的序列才能進行相加,譬如下面的列表和字串相加就會報錯
# 序列的加操作
print([1,2]+[3,4,5]) #[1, 2, 3, 4, 5]
# print([1,2]+"string")
#TypeError: can only concatenate list (not "str") to list
print([1,2]+"string")複製程式碼
2.4:序列的乘法
python乘法操作,用一個數N乘以一個序列,產生一個新序列會將原來的序列重複N邊
# utf-8
mString = "python"
# 序列的乘法操作
print(mString * 2) #pythonpython複製程式碼
2.5:成員檢查
檢查某個元素是否在一個序列中,Python中使用in運算子,它返回一個布林值,如果存在返回真值(true),不存返回假(false),in運算是大小敏感的
# utf-8
mString = "python"
# 序列成員檢查
print( "p" in mString) #True
print("P" in mString) #False
print("w" in mString) #False複製程式碼
2:列表(list)
其實上面我們已經使用過列表,如[1,2,3],python中使用方括號([])表示一個列表,列表中的每個元素使用逗號分割,上面介紹序列的通用操作也都統統適用於列表的操作中。
列表中型別可以不同,宣告一個列表,
mList = [1,"2",-3]複製程式碼
列表是可變的,可以改變列表的值,列表有一些專用的操作。
# 列表操作
mList = [1,2,3,"3","str","python",56.3,-6]
# [1, 2, 3, `3`, `str`, `python`, 56.3, -6]
print(mList)
# 修改列表的值
mList[1] = 15;
[1, 15, 3, `3`, `str`, `python`, 56.3, -6]
print(mList)複製程式碼
上面將列表引索為1的值修改為15
刪除一個元素,使用del 運算刪除一個元素
del mList[0]
print(mList)複製程式碼
- append方法
列表末尾新增元素
mlist = [1,2,"str",45.5]
mlist.append("python")
print(mlist)複製程式碼
append()方法不會返回一個新的列表,它是在原有列表上操作的
- count()
統計某個元素在列表中出現的次數
print(mlist.count(1)) # 1複製程式碼
- extend
上面的append()每次只能新增一個值,extend()方法可以每次追加一個列表的多個值
mlist1 = [10,23,45]
mlist.extend(mlist1)
print(mlist) #[1, 2, `str`, 45.5, `python`, 10, 23, 45]複製程式碼
這個看起來和開始的加操作(+)一樣,但是二者是有區別的,extend()方法是修改了被擴充套件的列表,在這就列表mlist,而連線操作是返回一個新的列表
- index()
獲取某個元素在列表中第一次出現的引索位置
print(mlist.index(2)) # 1複製程式碼
某個值在列表中找不到時,index()會發生異常,個人感覺這不太友好,譬如Java中找不到時返回固定的-1
- insert()
列表任意位置插入一個值,在mlist第一個值的位置插入一個“test”
mlist.insert(0, "test")
print(mlist) #[`test`, 1, 2, `str`, 45.5, `python`, 10, 23, 45]複製程式碼
- pop()
從列表中刪除一個元素(預設是最後一個元素)並返回該值
print(mlist.pop()) # 45
print(mlist) # [`test`, 1, 2, `str`, 45.5, `python`, 10, 23]複製程式碼
- remove()
從列表中刪除第一個匹配的值
mlist = [1,2,"str",45.5]
mlist.remove(2)
print(mlist) #[1, `str`, 45.5]複製程式碼
該方法也是原位修改的,沒有返回新的列表
- reverse()
列表值反轉
mlist = [1,2,"str",45.5]
mlist.reverse()
print(mlist) # [45.5, `str`, 2, 1]複製程式碼
3:元組
元組也是Python中的一種序列,它和列表不通的時,元組是不可改變的,元組使用小括號(也可以不用小括號),列表使用方括號,建立元組也很簡單
tup1 = (1, 2, 3, 4, 5 );
tup2 = "a", "b", "c", "d";複製程式碼
建立空元組
tup1 = ();複製程式碼
建立只有一個值的元組
tup1 = (1,);複製程式碼
就算只有一個值的元組也要新增逗號,發現了沒有,元組中逗號才是最重要的,加不加小括號沒關係,看下面的例子
print(3*(2+3)) # 15
print(3*(2+3,)) # (5, 5, 5)複製程式碼
元組的操作上面的操作相似,就不在列舉了