一.列表list
概述
變量:使用變量?jī)?chǔ)存數(shù)據(jù),但是搁宾,缺點(diǎn):一個(gè)變量每次只能存儲(chǔ)一個(gè)數(shù)據(jù)
思考:如果一次性存儲(chǔ)多個(gè)數(shù)據(jù)倔幼,怎么做损同?
解決:采用列表
作用:列表相當(dāng)于是一個(gè)容器,可以同時(shí)存儲(chǔ)多個(gè)數(shù)據(jù)
本質(zhì):列表是一種有序的集合
說明:有序指的就是有順序[數(shù)據(jù)的存放的是順序和底層存儲(chǔ)的順序是相同的]
代碼演示:
#需求:求5個(gè)人的平均年齡
age1 = 10
age2 = 13
age3 = 16
age4 = 39
age5 = 20
#list
#在椕裕空間中有一個(gè)變量【列表的名字】
#變量指向了內(nèi)存堆空間中的一個(gè)列表等龙,列表中存儲(chǔ)了5個(gè)變量
age_list = [10, 13, 16, 39, 20]
2.創(chuàng)建列表
語(yǔ)法: 變量名×娣 = 列表
列表名稱 = [數(shù)據(jù)1黍衙,數(shù)據(jù)2, ...]
說明:使用[ ]表示創(chuàng)建列表
? 列表中存儲(chǔ)的數(shù)據(jù)被稱為元素
列表中的元素被從頭到尾自動(dòng)進(jìn)行了編號(hào)從0開始,這個(gè)編號(hào)被稱為索引涯捻,角標(biāo)或者下標(biāo)
索引的取值范圍:0~元素的個(gè)數(shù)-1[列表的長(zhǎng)度-1]
超過索引的范圍: 列表越界
代碼演示:
#語(yǔ)法:列表名【標(biāo)識(shí)符】 = [元素1,元素2.凌外。康辑。轿亮。我注。]
#1.創(chuàng)建列表
#1.1創(chuàng)建一個(gè)空列表
list1 = []
print(list1)
#1.2創(chuàng)建一個(gè)帶有元素的列表
list2 = [52,463,6,473,53,65]
print(list2)
#2.思考問題:列表中能不能存儲(chǔ)不同類型的數(shù)據(jù)迟隅?
list3 = ['abc',10,3.14,True]
print(list3)
#注意:將需要存儲(chǔ)的數(shù)據(jù)放到列表中智袭,不需要考慮列表的大小吼野,如果數(shù)據(jù)量很大的情況,在進(jìn)行存儲(chǔ)數(shù)據(jù)的時(shí)候闷哆,列表底層自動(dòng)擴(kuò)容
3.列表元素的訪問
訪問方式: 通過索引訪問列表中的元素[有序,索引:決定元素在內(nèi)存中的位置]
3.1 獲取元素
語(yǔ)法:列表名[索引]
代碼演示:
元素的訪問
創(chuàng)建列表
list1 = [5,51,6,76,98,3]
#需求:獲取索引為3的位置上的元素
print(list1[3])
3.2 替換元素
語(yǔ)法: 列表名[索引] = 值
注意 : 列表中儲(chǔ)存的是其實(shí)是變量,所以可以隨時(shí)修改值
代碼演示:
需求:將索引為1位置上的元素替換為100
print( list1[ 1 ])
list1[ 1 ] = 100
print( list1 [1] )
#問題:超過索引的取值范圍抱怔,則會(huì)出現(xiàn)索引越界的錯(cuò)誤
#解決辦法:檢查列表索引的取值范圍
#print(list1[6])? #IndexError: list index out of range? 索引越界
3.3 遍歷列表
#列表的遍歷
list2 = [23,54,6,45,56]
#1.直接操作的是元素
for num in list2:
print(num)
#2.通過索引的方式操作元素
#思路:使用列表生成器生成一個(gè)和索引有關(guān)的列表 0~len(list2) -1
for index in range(len(list2)):
#index 中保存的是0,1,2.....
n =? list2[index]
print( n )
#3.同時(shí)遍歷索引和元素
#enumerate? 枚舉【類似于一個(gè)容器】
#index,n1----->索引野蝇,元素值
for index, n1 in enumerate(list2):
print( index,n1 )
4. 列表的操作
1.1 列表元素組合
代碼演示:
#列表組合【合并】
#使用加號(hào)
list1 =[432,435,6]
list2 = ["abc","dhfj"]
list3 = list1 + list2
print(list3)? # [432, 435, 6, 'abc', 'dhfj']
1.2 列表元素重復(fù)
代碼演示:
#列表元素的重復(fù)
#使用乘號(hào)
list4 = [1,2,3]
list5 = list4 * 3
print(list5)? #[1, 2, 3, 1, 2, 3, 1, 2, 3]
1.3 判斷元素是否在列表中
代碼演示:
#判斷指定元素是否在指定列表中
#成員運(yùn)算符? in? not in
list 6 =?[32,43,546,"hello",False]
print(43 in list6)
print(43 not in list6)
print(100 in list6)
print(100 not in list6)
"""
工作原理:使用指定數(shù)據(jù)在列表中和每個(gè)元素進(jìn)行比對(duì)绕沈,只要元素內(nèi)容相等帮寻,則說明存在的
True
False
False
True
"""
1.4 列表截取[切片]
代碼演示:
#列表的截取
list7 =?[23,34,6,57,6878,3,5,4,76,7]
print( list7[4])
#使用冒號(hào):
#截取指定的區(qū)間:列表名[開始索引:結(jié)束索引],特點(diǎn):包頭不包尾? ? 前閉后開區(qū)間
print( list7 [2 : 6])
#從開頭截取到指定索引固逗,特點(diǎn):不包含指定的索引
print(list7[0:6])
print(list7[:6])
#從指定索 引截取到結(jié)尾
#注意,因?yàn)榘^不包尾,所以如果要去到最后一個(gè)元素,可以超過索引的范圍,不會(huì)報(bào)錯(cuò)
print(list7 [4 : 20])
print (list7[4 : ]
5.列表的功能[掌握]
Python內(nèi)置的功能[函數(shù)]
用法
代碼演示:
#功能的使用:列表名.()
# 一 添加元素
1.append()? ?追加,在列表的末尾添加元素
#特點(diǎn):是在原列表的基礎(chǔ)上操作的
list2 = [1,2,3,4,5]
print(list2)
#追加單個(gè)元素列表
list2.append(6)
#追加多個(gè)元素,不能直接追加,通過列表的形式追加,形成一個(gè)二維列表
list 2 .append([7,8]
print( list2))
2. extaend()? ?擴(kuò)展,在列表的末尾添加元素
list2 ,extend(9)? ?TypeError: 'int' object is not iterable
list2.extend( [9,10] )
print(list12)
#注意: append可以添加單個(gè)元素,但是extend不可以
append添加多個(gè)元素的時(shí)候,以整個(gè)列表的形式添加進(jìn)去;但是,extend只添加元素
3.insert() 插入 ,在指定的索引處處插入一個(gè)元素,后面的其他元素向后順延
# insert (索引,插入的數(shù)據(jù))
list13 = [1,2,3,4,5]
print(list13)
需求: 在索引為2 的位置插入一個(gè)數(shù)字100
list3.insert(2,100)
print( list3 )
# 將整個(gè)列表作為一個(gè)整體,插入到原列表中
liast3 .insert( 2, [7,8])
print( list3 )
二 刪除元素
1.pop()? 彈出,移除列表中指定索引的元素
list14 = [1,2,3,4,5]
print(list14)
#1.默認(rèn)移除的是最后一個(gè)元素
#2.返回的是被移除的數(shù)據(jù)
result14 = list14.pop()
print(list14)? #[1, 2, 3, 4]
print(result14)? #5
print(list14.pop(1))
print(list14)
2. remove()? 移除? 特點(diǎn): 移除指定元素在列表中匹配到的第一個(gè)元素[從左往右]
# remove(元值)
list15 = [1,2,3,4,5,4,6,4]
print(list15)
list15.remove(4)
print(list15)
3.clear()? ?清除? 清除列表中的所有的元素,原列表變?yōu)榭樟斜?/p>
list16 = [25,36,673]
print(list16)
list16.clear()
print(list16)
三 獲取
#直接使用功能: 功能名稱(列表)
1. len()length , 長(zhǎng)度,獲取列表的長(zhǎng)度或者獲取列表中的元素個(gè)數(shù)
list17 = [425.74,8,58679,7,65,65,64,6]
# 索引的取值范圍: 0 ~len(list17) -1
length = len(list17)?
print(length)
2.max()? 獲取列表中的最大值
print(max(list17))
3.min()? 獲取列表中的最小值
print(min(list17))
4.index()? ?索引, 從列表中匹配到的第一個(gè)指定元素的索引值
index(元素值)
list18 = [10,20,30,40,50,30,40,50]
inx1 = list18.index(30)
print(inx1)? # 2
inx2 = list18.index(50)
print ( inx2)? #4
5.count()? 個(gè)數(shù),查找指定元素在列表中出現(xiàn)的次數(shù)
print(list18.count(50)) #2
四 其他用法
1 reverse()? ?反轉(zhuǎn),將列表中宏的元素倒序輸出
list19 = [10,20,30,40,50]
注意:在列表的內(nèi)部進(jìn)行反轉(zhuǎn),并沒有生成新的內(nèi)部操作
list20 = [34,65,768,23]
#列表名.sort()
#升序
#list20.sort()
#降序
list20.sort(reverse = Ture)
print( list20)
# 3.sorted() 排序,默認(rèn)為升序排序,注意:生成一個(gè)新的列表
list21 =?[34,65,768,23]
#升序
list22 = sorted(list21,reverse = Ture)
print(list22)
#降序
list23 = sorted(list21,revers= Ture)
print(list23)
#按照元素的長(zhǎng)度來進(jìn)行排序
list00 =["abc","hello","g","fhekfgjahgjkq"]
list24 = sorted(list00,key=len)
print(list24)
#4.拷貝
賦值
list25 =?[23,3,546]
list26 = list25
list26[1] = 100
print(list25)? ##[23, 100, 546]
print(list26)? ##[23, 100, 546]
print(id(list25))
print(id(list26))
#淺拷貝:內(nèi)存的拷貝[實(shí)體,堆空進(jìn)]
list27=[23,3,546]
list28 = list27.copy()
list28[1] = 200
print(list27) #[23, 3, 546]
print(list28) #[23, 200, 546]
print(id(list27))? #30560968
print(id(list(28))? #30561032
#深拷貝
list1=[23,3,[4,5]]
list2 = copy.deepcopy(list1)
#練習(xí):remove()
list30 =?[23,435,5656,6767,435,23,23,54,64,5676,23,23,23]
#需求:移除列表中指定的所有元素,例如:23
"""
list30.remove(23)
print(list30)
list30.remove(23)
print(list30)
list30.remove(23)
print(list30)
list30.remove(23)
print(list30)
list30.remove(23)
print(list30)
"""
#定義一個(gè)變量,用于記錄元素的位置[索引]
#問題 :remove功能是在列表內(nèi)部操作的
num = 0
# length= len(list30)
all = list30,count(23)
while unm< all:
#依據(jù):remove每次刪除的第一次匹配的元素[從左到右]
list30.remove(23)
num += 1
print(list30)
6.二維列表
一個(gè)列表的元素是一個(gè)列表
代碼演示:
#一維列表
list1 = [1,23,5,346]
#二維列表
list2 =?[[543,54,6],[234,35,46,4565,767],[65,65,65,565]]
#處理二維列表:當(dāng)做一個(gè)一維列表使用
sublist= list2[1]
print(sublist)
print(sublist[2])
二 布爾值和空值
1,一個(gè)布爾類型的變量一般有兩個(gè)值,True,False
作用: 用于分支和循環(huán)語(yǔ)句中作為條件判斷
代碼演示:
#Boolean
b1 = True
b2 = False
#條件表達(dá)式或者邏輯表達(dá)式都是布爾值
print(4>5)
print(1 and 0)
2 空值
python中的一種特殊的數(shù)據(jù)類型,使用None表示
區(qū)別于0:0是數(shù)字類型,None本身就是一種數(shù)據(jù)類型
代碼演示:
#空值
n =None
print(n)? # None
3.數(shù)據(jù)類型
1.數(shù)字類型分類
1.1 整數(shù)
可以處理python中任意大小的整型
代碼演示:
num1 = 10
num2 = num1
print(num,num2)
#可以連續(xù)定義多個(gè)同種類型的變量,初始值相同
num3 = num4 = num5 = 100
# 同時(shí)定義多個(gè)變量,初始值不同
num6,num7 = 60,70
#可以交換兩個(gè)變量的值[掌握]
#自己實(shí)現(xiàn)
nn1= 22
nn2 =33
temp = nn1
nn1 =temp
print(nn1,nn2)
n1 =22
n2 =33
print(n1,n2)? ##22 33
n1,n2 = n2,n1
print(n1,n2)
#獲取變量在內(nèi)存的地址
print(id(num1),id(num2))
1.2 浮點(diǎn)數(shù)
由整數(shù)部分和小數(shù)部分組成
注意:浮點(diǎn)數(shù)在計(jì)算機(jī)中運(yùn)算的時(shí)候可能會(huì)出現(xiàn)四舍五入
2.系統(tǒng)功能
2.1數(shù)學(xué)功能
abs(x) : absolute 求x的絕對(duì)值
max() : 求最大值
min(求最小值)
pow(n,m): 求一個(gè)數(shù)的多少次冪
round(x,n): 返回浮點(diǎn)數(shù)x的四舍五入值,如果給出n值,則表示舍入到小數(shù)點(diǎn)后幾位
代碼演示:
print(abs(-10))
print(max(23,34,6,56,57,6))
print(min(23,34,6,56,57,6))
printpow(3,5)
print(round(3.456))? # 3
print(round(3.656))? # 4
print(round(3.656,2))? # 3.66
print(round(3.646,1))? #3.6
導(dǎo)入math 模塊,math.功能名()
代碼演示:
#以下的功能必須導(dǎo)入math模塊
import? math
#使用格式:math.功能名稱
#19向上取整
print(math,ceil(18.1))
print(math.ceil(18.9))
#18向下取整
print(math.floor(18.1))
print(math.floor(18.9))
#求平方
print(pow(3,2))
#求開平方[掌握]
print(math.sqrt(9))
# 獲取整數(shù)部分和小數(shù)部分,得到的結(jié)果為元組
print(math.modf(22.3))
2.2 隨機(jī)數(shù) random [掌握]
代碼演示:
import random
#1,random.choice(列表)? 從指定列表中宏隨機(jī)選擇一個(gè)元素出來
#指定列表
num = random.choice([1,3,5,7,9])
print( num1)
# 列表生成器
num2 = random.choice(range(5))
print(num2)
#使用字符串,相當(dāng)于使用了元素為字母的列表
num3 = random,choice("hello")? # 等價(jià)于["h","e","l","l","o"]
print(num3)
#需求:產(chǎn)生一個(gè)4~10之間的隨機(jī)數(shù)
print(random.choice([4,5,6,7,8,9,10]))
print(random.choice(range(4,11)))
# 2.random.randrange(start,end,step)
"""
start: 指定范圍的開始值,包含在范圍內(nèi),默認(rèn)為0
end: 指定范圍的結(jié)束值,不包含在范圍內(nèi)
st ep: 步長(zhǎng),指定的遞增基數(shù),默認(rèn)為1
"""
#需求: 從1~100之間選取一個(gè)奇數(shù)隨機(jī)數(shù)
print(random.choice)range(1,100,2)))
print(random.randrange(1? ? ?,100,2))
#需求 生成一個(gè)0~99之間的隨機(jī)數(shù)
print(random.randrange(100))
3.random.random()? 獲取0~1 之間的隨機(jī)數(shù),結(jié)果為浮點(diǎn)數(shù)
n = rangdom.random()
需求: 保留小數(shù)點(diǎn)后兩位
print(round(n,2))
需求 ;獲取4~10之間的隨機(jī)數(shù)
n1 = random.random() * 6+4
"""
[0,1] *6------->[0,6]
[0,6] + 4------>[4,10]
4.將列表中的元素進(jìn)行隨機(jī)排序[了解]
list1 = [23,5435,4,6]
random.shuffle(list1)
print(list1)
隨機(jī)生成一個(gè)實(shí)數(shù),它在[3,9]范圍內(nèi),結(jié)果為浮點(diǎn)型
print(random.uniform(3,9))
需求:求50~100之間的隨機(jī)數(shù),包括浮點(diǎn)數(shù)
n2 = random.uniform(50,100)