Python學習筆記3_列表和元組

Python的數據結構

序列是python中最基本的數據結構,共六種內建序列:列表、元組、字符串、Unicode字符串、buffer對象、和xrange對象。還有一種數據結構叫映射,如字典

容器(python的數據結構)
        --序列
                --列表
                --元組
                --字符串
                -- Unicode字符串
                --buffer對象
                --xrange對象
        --映射
                --對象
        --集合

  • 列表可以修改,元組不可修改

1.通用序列操作

1.1 序列的訪問方式:索引訪問和分片訪問

#序列
week = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]

#使用索引訪問元素,可以從前往後(從0開始),也可以從後往前(從-1開始)
print("週三是:"+week[2])
print("週日是:"+week[-1])

#分片訪問,用冒號分割,與java的String對象的subString方法異曲同工。
print("週三到週六分別爲:"+str(week[2:5]))

#特別的訪問方式
print("一週前三天爲:"+str(week[:3]))
print("一週後三天爲:"+str(week[-3:]))

#顯示設置分片訪問的步長(默認爲步長爲1,即直接取下一個數)
print("步長爲2的分片訪問:"+str(week[::2]))

執行結果如下:

週三是:Wednesday
週日是:Sunday
週三到週六分別爲:['Wednesday', 'Thursday', 'Friday']
一週前三天爲:['Monday', 'Tuesday', 'Wednesday']
一週後三天爲:['Friday', 'Saturday', 'Sunday']
步長爲2的分片訪問:['Monday', 'Wednesday', 'Friday', 'Sunday']

1.2 序列的運算:序列相加、乘法【一個數字乘以序列】

seq1 = [1,2,3]
seq2 = [4,5,6]
#序列相加(可以理解爲序列的有序合併)
seq3 = seq1 + seq2
#序列的乘法(可以理解爲序列的n次合併)
seq4 = seq1 * 3
print(seq3)
print(seq4)

運行結果:

[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]

Python的內建值None,代表空值.n個元素的序列可以這樣定義:seq = [None] * n。

1.3 成員資格

成員資格使用in運算,即判斷某元素是否在序列中

#資格運算
permissions = 'rw'
print('r' in permissions)
print('rw' in permissions)
print('x' in permissions)
print('wr' in permissions)
print('-----------------')
nums = [1,2,3,4]
nums2 = [1,2]
nums3 = [1,3]
nums4 = [3]
print(nums2 in nums)
print(nums3 in nums)
print(nums4 in nums)

運行結果:

True
True
False
False
-----------------
False
False
False

1.4 長度、最小值、最大值

可以使用對應的內建函數len、min、max進行運算

print(len(nums))
print(min(nums))
print(max(nums))
print(max(4,2,5))
print(min(4,2,5))

運行結果:

5
1
8
5
2

max和min函數可以以序列爲參數,也可以多個數字做參數

2.列表【可變序列】操作

2.1 list函數【用於把序列轉換成可修改的列表】

#列表操作#########
name = "LeonWang"
#把序列轉換成列表
nameSeq = list(name)
print(nameSeq)

運行結果:

['L', 'e', 'o', 'n', 'W', 'a', 'n', 'g']

這個函數適用於所有類型的序列。

2.2 基本列表操作

name = "LeonWang"
nameSeq = list(name)
print(nameSeq)
#賦值操作
nameSeq[3] = 'm'
print(nameSeq)
#刪除元素
del nameSeq[3]
print(nameSeq)
#分片賦值
nameSeq[4:5] = list('Li')
print(nameSeq)

運行結果:

['L', 'e', 'o', 'n', 'W', 'a', 'n', 'g']
['L', 'e', 'o', 'm', 'W', 'a', 'n', 'g']
['L', 'e', 'o', 'W', 'a', 'n', 'g']
['L', 'e', 'o', 'W', 'L', 'i', 'n', 'g']

分片賦值時賦值列表的元素個數不一定要跟分片個數一致,可以在分片位置插入少於或者多於分片元素個數。也可以通過分片賦空值的方法達到刪除元素的效果

2.3 列表方法

Method Common
append 在列表末尾追加新的對象(字符,字符串,數字,列表等等)
count 統計某個元素在列表中出現的次數
extend 在列表的末尾一次性追加另一個序列中的多個值(用新列表擴展原列表)
index 用於找出某個元素第一個匹配位置
insert 用於將對象插入到列表中
pop 移除列表中的一個元素(默認最後一個)並返回該值
remove 移除列表中某個值的第一個匹配項目
reverse 將列表中的元素方向存放
sort 用於在原位置對列表進行排序
高級排序
#列表方法
words = ["I","LOVE","YOU",",","CHINA","!"]
print("原列表:"+str(words))
words.append("^_^")
print("列表末尾追加後:"+str(words))
print("統計YOU出現的次數:"+str(words.count("YOU"))+",YO出現的次數:"+str(words.count("YO")))
anowords = ["THAT'S","TRUE"]
words.extend(anowords)
print("用列表anowords擴展列表words後:"+str(words))

運行結果:

原列表:['I', 'LOVE', 'YOU', ',', 'CHINA', '!']
列表末尾追加後:['I', 'LOVE', 'YOU', ',', 'CHINA', '!', '^_^']
統計YOU出現的次數:1,YO出現的次數:0
用列表anowords擴展列表words後:['I', 'LOVE', 'YOU', ',', 'CHINA', '!', '^_^', "THAT'S", 'TRUE']

這些方法都是通過列表對象進行調用,類似於java的方法調用,使用非常簡單,不全部列舉,不過有幾點需要注意:

  • extend與連接操作(+)看似一樣,其實不然,extend是修改了被擴展的序列,而連接操作返回全新的列表。

  • list方法使用時,若找到匹配元素則返回其所在索引位置,否則異常

  • pop與remove的區別:pop有返回值,參數可有可無,刪除的是某索引位置的值,remove無返回值,需要參數,刪除的是某元素第一次出現的位置,當元素不存在時異常。

  • sort方法沒有返回值,切記。

  • 高級排序是通過編寫比較函數compare,實現元素的比較規則,然後調用列表的sort方法,將比較函數名作爲參數傳遞進去.這種方式也類似於java.

3. 元組【不可變序列】

  • 元組的初始化
    使用逗號分割了某些值,即創建了元組。元組一般是以()表示括起來的。若要創建一個元素的元組也需要用在元素後面加逗號,否則不爲元組。
#元組初始化
students = "Leon","Lucy","Lily"
print(students)
student = ("Leon",)
print(student)

運行結果:

('Leon', 'Lucy', 'Lily')
('Leon',)
  • tuple函數,類似於list函數,只是轉換目標不同,list用於轉成列表,而tuple用於轉換成元組。如果參數本身就是元組,則參數被原樣返回。
#tuple函數
name = "Leon"
namechars = tuple(name)
print(namechars)

運行結果:

('Leon',)
('L', 'e', 'o', 'n')
  • 元組基本操作:基本就是創建和訪問,訪問方式同於其他序列。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章