1. 列表
1.1. 列表介紹
- 什么時(shí)候用列表:需要用一個(gè)變量去同時(shí)保存多個(gè)數(shù)據(jù)
- 列表:列表是python內(nèi)置的容器型數(shù)據(jù)類型(序列)刃滓,可變(支持增刪改)并且有序(支持下標(biāo)操作)
用中括號(hào)將多個(gè)元素括起來围辙,多個(gè)元素之間用逗號(hào)隔開:[元素1八孝,元素2抬驴,蒜素3....] - 列表中的元素:python內(nèi)置的數(shù)據(jù)類型對(duì)應(yīng)的數(shù)據(jù),或者程序員自定義類型的數(shù)據(jù)都可以帜乞。
注意:賦值預(yù)算表達(dá)式不能作為列表元素捡多!
list = [120,12.9,True,'abc',[1,2,3]]
1.2獲取元素(和字符串一樣)
1.2.1獲取單個(gè)元素
獲取單個(gè)元素(和字符串一樣): 列表[下標(biāo)]
names = ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下']
# print(names[100]) # IndexError: list index out of range(下標(biāo)越界)
print(names[-2])
1.2.2獲取部分元素(切片)
獲取部分元素-切片(和字符串一樣): 列表[開始下標(biāo):結(jié)束下標(biāo):步長]
切片的返回值是個(gè)列表
print(names[1:4]) # ['火影忍者', '死神', '犬夜叉']
print(names[1:4:-1]) # []
print(names[::-1]) # ['一人之下', '熊出沒', '妖精的尾巴', '犬夜叉', '死神', '火影忍者', '海賊王']
print(names[:]) # ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下']
print(names[::2]) # ['海賊王', '死神', '妖精的尾巴', '一人之下']
1.2.3 遍歷
a.直接遍歷
for 變量 in 列表: # 變量取到的是元素
循環(huán)體
b.通過下標(biāo)遍歷
for 變量 in range(len(列表)): # 變量取到的是下標(biāo)
循環(huán)體
for item in names:
print(item)
for index in range(0, len(names), 2):
print(index, names[index])
練習(xí): 將班級(jí)學(xué)生的成績保存到scores中蓖康,求班級(jí)的平均成績,和不及格人數(shù)
scores = [90, 80, 70, 100, 76, 57, 54]
sum1 = 0
count = 0
for score in scores:
sum1 += score
if score < 60:
count += 1
print('平均分是:%.1f 不及格人數(shù):%d' % (sum1/len(scores), count))
補(bǔ)充: 求和函數(shù)sum
sum(序列) - 求序列中所有元素的和垒手;序列要求元素類型一致蒜焊,并且元素支持求和運(yùn)算
print(sum(scores), sum(range(101)))
sum()求和函數(shù)
sum(序列) -求序列中所有元素的和;序列要求元素類型必須是數(shù)字類型科贬。
1.3 列表的增刪改
- 增: -列表.append(元素)泳梆,在指定的列表最后添加指定元素
persons = ['路飛', '寶兒姐', '張楚楠']
persons.append('容嬤嬤')
print(persons)
persons.append('趙云')
print(persons)
插入: -insert(下標(biāo),元素)唆迁,在指定列表的指定位置插入元素
numbers = [1, 20, 34, 50]
numbers.insert(2, 22)
print(numbers)
numbers.insert(0, 1000)
print(numbers)
練習(xí): 輸入一個(gè)數(shù)字鸭丛,將它添加到一個(gè)有序列表中竞穷,要求添加進(jìn)去后不改變從小到大或者從大到小排列的順序[1, 20, 100, 200] 輸入: 50 [1, 20, 50,100, 200]; 輸入:0 [0, 1, 20, 100, 200], 輸入: 500 [1, 20, 100, 200, 500]
numbers = [1, 20, 100, 200]
num = int(input('請(qǐng)輸入一個(gè)數(shù)字:'))
思路: 找到第一個(gè)比輸入的數(shù)字大的數(shù)字對(duì)應(yīng)的下標(biāo),然后插入到這個(gè)下標(biāo)前。如果原來的數(shù)字都比輸入的小蜀变,就添加到最后
for index in range(len(numbers)):
if numbers[index] > num:
numbers.insert(index, num)
break
else:
numbers.append(num)
print(numbers)
- 刪:-del 列表[下標(biāo)]驻售;
列表.remove(元素),將指定列表中第一個(gè)指定元素刪除看政。
names = ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下', '海賊王']
del names[2]
print(names)
names.remove('海賊王')
print(names)
列表.pop(下標(biāo))朴恳,刪除列表指定位置的元素,返回被移除的元素
names = ['海賊王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出沒', '一人之下', '海賊王']
del_name = names.pop()
print(names, del_name)
del_name = names.pop(1)
print(names, del_name)
清空:列表.clear() -清空列表所有元素
names.clear()
print(names)
- 改: 列表[下標(biāo)]=新值 -將列表中指定下標(biāo)對(duì)應(yīng)的元素改成新值
nums = [1, 2, 3]
nums[0] = 100
print(nums)
- in / not in
元素 in 列表 -- 判斷列表中是否包含指定的元素
print([1, 2] in [1, 2, 3, 4, [1, 2]]) # True
print([1, 2] in [1, 2, 3, 4]) # False
print(1 in [[1], 2, 3]) # False
print(1 in [1, 2, 3]) # True
1.4 列表的相關(guān)運(yùn)算
1.4.1 數(shù)學(xué)運(yùn)算: +, *
列表1+列表2 - 將兩個(gè)列表中的元素合并產(chǎn)生一個(gè)新的列表(原列表不會(huì)發(fā)生改變)
列表*N - 列表中的元素重復(fù)N次產(chǎn)生新的列表
list1 = [1, 2, 3]
list2 = ['name', 'age']
new_list = list1 + list2
print(new_list, list1, list2)
print(list1*3)
list3 = [1]*100
print(list3)
1.4.2 比較運(yùn)算: ==, !=
list4 = [1, 2]
print([1, 2] == [2, 1]) # False
print([1, 2] != [2, 1]) # True
print([1, 2] == list4) # True
注意:>, <, >=, <= 只支持相同位置上元素類型相同的兩個(gè)列表
例如: print([1, 2, 3] > ['a', 'b']) #TypeError: '>' not supported between instances of 'int' and 'str'
1.5 內(nèi)置函數(shù)
len(列表)允蚣、sum(列表) - 要求列表中的元素必須是數(shù)字于颖、max(列表)、min(列表)
list(數(shù)據(jù)) - 將指定數(shù)據(jù)轉(zhuǎn)換成列表, 所有的序列都可以轉(zhuǎn)換成列表,比如: 字符串嚷兔,列表森渐、字典、集合冒晰、元祖同衣、range、迭代器壶运、生成器等 - 轉(zhuǎn)換的時(shí)候是將序列中的元素作為列表元素
print(list('abcd'))
print(list(range(5)))
print(list(str(123)))
nums = ['10', '23', '4'] # 10234
print(''.join(nums))
1.6. 相關(guān)方法
- 列表.count(元素) - 獲取指定元素在列表中出現(xiàn)的次數(shù), 結(jié)果是整數(shù)
- 列表.extend(序列) - 將序列中的元素添加到列表中, 結(jié)果None(返回值為空)
list1=[]
list1.extend('abc')
print(list1)
#運(yùn)行結(jié)果:['a', 'b', 'c']
- 列表.index(元素) - 獲取指定元素在列表中的下標(biāo)耐齐,如果這個(gè)元素有多個(gè)只獲取第一個(gè),如果元素不存在會(huì)報(bào)錯(cuò)
list2 = [1, 0, 1, 2, '張飛', '關(guān)羽', '趙云', '呂布']
print(list2.index('張飛'))
#運(yùn)行結(jié)果:4
print(list2.index('諸葛亮')) # ValueError: '諸葛亮' is not in list
- 列表.reverse() - 將列表中的元素倒序, 沒有返回值(None)。
list2.reverse()
print(list2)
list1=[1,2,3,4,5]
list1.reverse()
print(list1) #[5,4,3,2,1]
補(bǔ)充: 內(nèi)置函數(shù): reversed(序列) - 將序列中的元素倒序產(chǎn)生一個(gè)新的迭代器埠况, 原序列不會(huì)修改
list1 = [1, 2, 3]
result = reversed('abc')
# for item in result:
# print(item)
print(list(result))
print(list1)
- 列表.sort() - 對(duì)列表中的元素從小到大排序(列表中的元素類型一致并且支持比較運(yùn)算), 不會(huì)產(chǎn)生新的列表
list1 = [1, 5,2,7, 3,4]
list1.sort()
print(list1) #[1, 2, 3, 4, 5, 7]
#補(bǔ)充:列表.sort(reverse=True) - 從大到小排序
list1.sort(reverse=True)
print(list1) #[7, 5, 4, 3, 2, 1]
- 列表.copy() - 產(chǎn)生一個(gè)新的列表耸携,列表中的元素和原列表一樣,相當(dāng)于: 列表[:]
list1 = [1, 2, 3]
list2 = list1
list3 = list1.copy() #list2與list3的區(qū)別在于:list2與list1完全相等询枚,地址也相同违帆,list3雖然copy了list1的元素值,但是地址不同金蜀,內(nèi)存重新開辟空間存儲(chǔ)list3刷后。
print(list2, list3) #[1, 2, 3] [1, 2, 3]
list1.append(10)
print (list2,list3) #[1, 2, 3, 10] [1, 2, 3]
# 補(bǔ)充: id(變量) - 查看變量中實(shí)質(zhì)存儲(chǔ)的地址
# python所有變量實(shí)質(zhì)都是直接保存的數(shù)據(jù)在內(nèi)存中的地址
print(id(list1), id(list2), id(list3)) #11093456 11093456 11094616