一、清單是什麼
比較正式的解釋:
清單是由一系列按特定順序排列的元素組成,你可以建立包含字母清單中所有字母、數字或者所有家庭成員姓名的清單;也可以将任何東西加入清單中,元素之間可以沒有任何聯系。
通俗了解:
清單和Java中的數組類似,不過Java中的數組要求資料要保持同一資料類型,而清單沒有這個限制。如果把Java中數組比喻成集裝箱,那麼Python中的清單就相當于工廠,什麼都可以往裡放,沒有資料類型的限制。
和Java中的數組類似,Python的清單用[ ] 來表示清單,元素之間用逗号(英文)隔開。如:
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
二、清單元素的通路
由于清單是一個有序集合,是以我們可以通過索引來通路清單的元素。
索引下标從0開始
如:
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num[3])
Shane
>>> print(num[5][2])
Python
三、清單元素的CRUD
1、修改清單元素
通過索引來修改指定元素的内容:
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num[2] = 'Study'
>>> print(num)
[1, 2, 'Study', 'Shane', 3.14, [5, 6, 'Python']]
2、添加清單元素
添加元素共有三種方式:
<1>在清單末尾添加元素 – append();
<2>在清單任意位置添加元素 – insert();
<3>同時添加多個元素 – extend();
在清單末尾添加元素 – append()
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.append('好好學習')
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python'], '好好學習']
在清單任意位置添加元素 – insert()
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.insert(3, '你是最棒的')
>>> print(num)
[1, 2, 3, '你是最棒的', 'Shane', 3.14, [5, 6, 'Python']]
同時添加多個元素 – extend()
本質是兩個清單的合并,可以了解為擴容
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.extend(['加油', '100'])
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python'], '加油', '100']
3、删除清單元素
删除元素同樣有三種方式:
<1>使用del語句删除元素
<2>使用pop()方法删除元素
<3>使用remove()方法删除元素
使用del語句删除元素
根據索引進行删除(需要知道元素的索引)
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> del num[5]
>>> print(num)
[1, 2, 3, 'Shane', 3.14]
使用pop()方法删除元素
Python的清單底層就是資料結構中的棧,這個pop()方法和棧的出棧方法一樣:彈出清單末尾的元素,而且我們還可以接着使用這個元素。比如在開發中,我們要将使用者從活躍名單中删除,并讓他加入到非活躍名單就可以用這個方法。
pop()方法除了可以删除末尾元素,也可以和del語句一樣,根據索引删除指定位置的元素
在使用中如果無法确定使用那一個方法來删除,可以根據需求來選擇,如果我們要删除一個元素,且以後不會在使用到他,則可以選擇del語句,如果還要繼續使用,則使用pop()方法。
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num01 = num.pop()
>>> print(num)
[1, 2, 3, 'Shane', 3.14]
>>> print(num01)
[5, 6, 'Python']
>>> num02 = num.pop(2)
>>> print(num)
[1, 2, 'Shane', 3.14]
>>> print(num02)
3
使用remove()方法删除元素
如果我們隻知道元素的值而不知道元素的索引位置,那麼我們可以使用remove()方法來删除元素。使用remove()方法删除的元素我們也可以繼續使用
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.remove('Shane')
>>> print(num)
[1, 2, 3, 3.14, [5, 6, 'Python']]
>>> num03 = 3.14
>>> num.remove(num03)
>>> print(num)
[1, 2, 3, [5, 6, 'Python']]
>>> print(num03)
3.14
4、清單元素的周遊
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> for el in num:
print(el)
1
2
3
Shane
3.14
[5, 6, 'Python']
四、數字清單
1、使用range()建立數字清單
range()可以快速的生成一系列數字,如:
>>> for value in range(1, 5):
print(value)
1
2
3
4
列印了1~4的數字,不包含5.
要建立數字清單,可以使用函數list()将range()的結果直接轉換為清單。如果将range()作為list()的參數,輸出将為一個數字清單。如:
>>> value = list(range(1, 5))
>>> print(value)
[1, 2, 3, 4]
使用range()函數時,還可以指定步長。比如要列印1~10之間的偶數:
>>> value = list(range(2, 11, 2))
>>> print(value)
[2, 4, 6, 8, 10]
函數range()從2開始,不斷加2,直到達到或超過終值(11)。
簡單應用:
建立一個清單,其中包含1~10的平方:
nums = []
for value in range(1, 11):
num = value**2
nums.append(num)
print(nums)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2、數字清單的簡單統計計算
>>> nums = [1, 3, 2, 4, 6, 34, 67, 2, 4]
>>> min(nums)
1
>>> max(nums)
67
>>> sum(nums)
123
3、清單解析
清單解析将for循環和建立新元素的代碼合成一行,并自動附加新元素。
如上例中的建立一個清單,其中包含1~10的平方:
>>> nums = [num**2 for num in range(1 ,11)]
>>> print(nums)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
五、清單切片
1、生成切片
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums[0:3])
[1, 3, 2]
>>> print(nums[3:6])
[4, 5, 23]
>>> print(nums[:5])
[1, 3, 2, 4, 5]
>>> print(nums[3:])
[4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums[-3:])
[23, 767, 0]
1)給定索引範圍,可以生成任意位置的切片
2)沒有給定起始索引,自動從清單開頭開始提取
3)沒有給定終止索引,自動在清單末尾終止
4)負數索引傳回清單末尾相應距離的元素,可以用這個方法輸出清單末尾的任何切片
2、周遊切片
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> for num in nums[:3]:
print(num)
1
3
2
3、複制清單
可以使用切片的方式複制清單,不指定起始索引和終止索引即可複制整個清單。
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums01 = nums[:]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums01)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
複制之後的清單是一個獨立的清單,他們之間的CRUD互不影響。
不使用切片而直接将nums指派給nums01并不能起到複制效果,他們之間還是指向的同一個清單,元素操作時會互相影響。
六、組織清單
<1>使用sort()方法對清單進行永久性排序
<2>使用sorted()方法對清單進行臨時性排序
<3>倒着列印清單
<4>确定清單的長度
1、使用sort()方法對清單進行永久性排序
此方法是永久性的改變了清單的排序順序,不可逆轉
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums.sort()
>>> print(nums)
[0, 1, 2, 3, 4, 5, 23, 23, 23, 65, 767]
傳遞參數reverse=True可以将清單排序後再反轉
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums.sort(reverse=True)
>>> print(nums)
[767, 65, 23, 23, 23, 5, 4, 3, 2, 1, 0]
2、使用sorted()方法對清單進行臨時性排序
sorted()隻是臨時進行排序,不改變清單的原始順序
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(sorted(nums))
[0, 1, 2, 3, 4, 5, 23, 23, 23, 65, 767]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
同樣的,傳遞參數reverse=True也可以将排序後的清單反轉
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(sorted(nums))
[0, 1, 2, 3, 4, 5, 23, 23, 23, 65, 767]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(sorted(nums,reverse=True))
[767, 65, 23, 23, 23, 5, 4, 3, 2, 1, 0]
3、倒着列印清單
使用reverse()方法
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums.reverse()
>>> print(nums)
[0, 767, 23, 65, 23, 23, 5, 4, 2, 3, 1]
4、确定清單的長度
使用len()函數
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> len(nums)
11