python自動化測試學習筆記-2-列表


 

上次我們學習了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('用戶已經存在,請重新輸入!')

查看執行結果:

好了今天先學到這里,明天繼續~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM