上次我們學習了python的基本概念,了解了python的變量及數據類型,並實戰了條件判斷,for/while循環,字符串輸出,格式化輸出的一些基本用法,接下來我們繼續學習其他的一些數據類型。
python的數據類型-列表
列表是最常用的python數據類型,每一個元素都配有一個位置(角標或索引),從0開始依次類推。可以進行的操作包括索引,切片,追加,檢查等。
1、定義一個列表
只要使用方括號括起來,並用逗號分隔不同數據項,就定義好一個列表了。例如:
stus=['xiaoli','xiaowang','xiaotu','xiaozhao']
那我們怎么打印出列表中的值呢,剛剛我們說了,列表有角標,我們可以通過角標找到想要的數據,如下:
stus=['xiaoli','xiaowang','xiaotu','xiaozhao']
print(stus[3])
角標是3,從0開始的話那就是第四個數據,我們執行看一下結果:
角標可以從正向計數,也可以從逆向計數,例如最后一個元素的角標為-1,依次類推,例如:
stus=['xiaoli','xiaowang','xiaotu','xiaozhao']
print(stus[3])
print(stus[-1])
我們執行一下,可以看到打印的效果是一樣的:
如果定義一個空的列表
stus=[]
上面我們列舉的都是一維數組,python中還存在多維數組,例如:
stus=['一年級','二年級','三年級','四年級',['一班','二班','三班','四班','五班',[1,2,3,4,5,6,7,8]]]
print(stus)
我們打印來看一下
可以看到多維數組中字符串類型和int類型是可以同時存在的。
2、增加元素
append方法,在末尾增加一個元素,一次只能增加一個。我們來實驗一下
stus=['xiaoli','xiaowang','xiaotu','xiaozhao']
stus.append('wangzhi')
print(stus)
查看打印結果:
insert方法,將對象插入列表指定的位置,如:
stus=['xiaoli','xiaowang','xiaotu','xiaozhao']
stus.insert(2,'www')
print(stus)
當輸入的下標不存在的場合,就會把數據添加到末尾,來實驗一下:
stus=['xiaoli','xiaowang','xiaotu','xiaozhao']
stus.insert(9,333)
print(stus)
打印看一下結果:
extend方法,在列表的末尾一次性追加另一個序列中的多個值(把兩個列表合並):
num1=[1,2,3,4,5]
num2=[6,7,8,9,10]
num1.extend(num2)
print(num1)
print(num2)
查看執行結果
我們可以看到,打印出來的num1,是合並之后的列表,列表num2是不受影響的。
3、更新元素
可以直接給列表中的某一個元素進行賦值,如下:
num1=[1,2,3,4,5]
num1[2]=11
print(num1)
看一下執行結果:
可以看到角標為2的第三個元素,已經被修改為11;
4、刪除元素
del 語句:刪除操作可以使用del語句來操作,例如
num1=[1,2,3,4,5]
del num1[0]
print(num1)
我們來打印一下,看一下結果:
可以看到刪除了填寫的下標元素,此處需要注意的是,下標是必須填寫的,不填寫就會報錯,如果想要刪除整個列表,可以用clear方法,如下:
clear方法:
num1=[1,2,3,4,5]
num1.clear()
print(num1)
執行看一下結果,可以看到清空了整個list
pop方法,移除列表中的一個元素(默認最后一個元素),並且返回該元素的值。
num1=[1,2,3,4,5]
num2=[6,7,8,9,10]
num1.pop(1)
num2.pop()
print(num1)
print(num2)
看一下執行結果:

我們可以看到刪除操作中,我們指定了角標,則刪除了對應角標位置的數據,沒有指定角標的刪除了最后一個數據。
刪除操作還有一種方法,remove方法,直接刪除需要刪除的元素;如下:
num1=[1,2,3,5,4,5]
num1.remove(5)
print(num1)
看一下執行結果:
我們看到上述列表中有兩個[5],我們使用remove方法刪除5的時候,只會刪除其中的一個元素,刪除第一個匹配的元素,不會全部刪除。
pop和remove的區別還在於pop會返回刪除元素的值,而remove不會返回。
num1=[1,2,3,5,4,5]
print(num1.remove(5))
print(num1.pop(2))
我們看一下執行結果,remove返回的是none,pop返回了刪除的數據3:
5、反轉排序
reverse方法,使列表中的元素反向排列,例如
num1=[1,2,3,5,4,5]
num1.reverse()
print(num1)
執行結果:
sort 方法,對列表進行排序,但只能是同類型的元素進行排序,不同類型的元素會報錯,看一下:
num1=[1,2,5,3,4,'a','z','l','t']
num1.sort()
print(num1)
執行結果:
錯誤提示信息顯示str類型和int類型不能進行排序。我們來看一下同類型的排序:
num1=['a','z','l','t']
num1.sort()
print(num1)
查看結果:
排序默認的話為升序排序,如果需要倒敘排序我們可以借助reverse方法,對排序進行反轉,如下:
num1=[45,23,67,111,1,9,100]
num1.sort(reverse=True)
print(num1)
查看執行結果:
index方法,從列表中找出某個元素第一個匹配項的索引位置,使用方法如下:
num1=[45,23,67,111,1,9,100]
print('111的索引位置是:%s'%num1.index(111))
查看執行結果:
6、循環
list的一個重要特性就是可循環的,python可以對list進行解析,對list的元素進行遍歷,我們看一下直接應用for循環的結果:
num=['haha','hehe','heihei','hengheng']
for i in num:
print(i)
看一下執行結果,可以看到循環一個列表,取出了列表中的每一個元素:
在其他語言中想要遍歷出列表的每一個元素就沒有這么容易了,
7、切片
由於list可循環可遍歷的特性,我們就可以對list進行切片操作,取出我們想要的元素。
切片是list取值的一種方式。
切片的語法格式:
list[start:stop:step]
star:表示取值的開始
stop:表示取值的結束
step:表示步長
我們來實驗一下:
num=['haha','hehe','heihei','hengheng']
num2=num[0:3:1]
print(num2)
差看執行結果:
我們看到上述的結果,當我們結束值為3時,實際取到的值為下標為2的值,所以想取到一個列表中全部的值時,結束取值應為末尾下標+1。
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
print(num2)
執行結果:
#如果切片的開始值不寫的話,默認從0開始;如下:
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
num3=num[:3:1]
print(num2)
print(num3)
查看打印結果:
#如果切片的結束值不寫的話,則默認到最后,例如:
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
num3=num[:3:1]
num4=num[1::2]
print(num2)
print(num3)
print(num4)
查看打印結果,num4我們步長設置的2,所以是隔一個取一個數值:
#如果步長不寫的話默認是1,如下:
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
num3=num[:3:1]
num4=num[1::]
print(num2)
print(num3)
print(num4)
查看執行結果:
#如果都不填寫的話默認就是列表所有,步長為1,如下
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
num3=num[:3:1]
num4=num[:]
print(num2)
print(num3)
print(num4)
查看執行結果:
當步長為負數的場合,相當於從右往左取,如下:
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
num3=num[:3:1]
num4=num[:]
num5=num[::-1]
print(num2)
print(num3)
print(num4)
print(num5)
差看執行結果:
當步數是步數的時候,開始值和結束值也應該是負數,如下:
num=['haha','hehe','heihei','hengheng']
num2=num[0:4:1]
num3=num[:3:1]
num4=num[:]
num5=num[::-1]
num6=num[-1:-5:-1]
print(num2)
print(num3)
print(num4)
print(num5)
print(num6)
查看執行結果,負數的時候,結束標志同樣需要+1:
總結:切片操作的開始結束值是顧頭不顧尾,結束值為末尾角標+1。
8、切片同樣適用於字符串
切片:
str='今天真開心!明天星期五'
str1=str[1:10:1]
print(str1)
查看執行結果:
字符串用於循環:
str='今天真開心!明天星期五'
for i in str:
print(i)
查看結果:
如果需要同時打印下標和文字,用enumerate:
str='今天真開心!明天星期五'
for i,j in enumerate(str):
print('%s的下標是%s'%(j,i))
查看執行結果:
布爾類型
布爾類型只有True和False兩種值,簡單地說是非空即真,非0即真;如下:
a=''
b=0
c=' '
if a:
print('zhen')
else:
print('jia')
if b:
print('zhen')
else:
print('jia')
if c:
print('zhen')
else:
print('jia')
執行結果:
綜上我們來做一個小程序溫習一下:
要求:寫一個死循環, 注冊用戶,提示用戶注冊成功,如果已經存在則提示用戶已經存在。
user=[] #d定義一個空列表
while True:
username=input('請輸入用戶名:')#輸入用戶名
passwd=input('請輸入密碼:') #輸入密碼
if username in user: #判斷輸入的用戶名是否存在在列表中
print('用戶已經存在,請重新輸入!')
else:
print('恭喜你,注冊成功') #注冊成功
user.append(username) #用戶名添加到列表中
查看執行結果:
上面我們判斷用戶名是否存在,用了 in 進行判斷,還可以用計數的方法判斷,判斷輸入的用戶名在列表中的個數,如果個數為0則說明輸入的用戶名不存在,可以注冊成功。例如:
username=[]
while True:
name=input('請輸入用戶名:')
passwd=input('請輸入密碼:')
if username.count(name)==0:
print('恭喜你注冊成功!')
username.append(name)
else:
print('用戶已經存在,請重新輸入!')
查看執行結果:
好了今天先學到這里,明天繼續~