【python】內建資料結構——列表
【引言】python提供了4個內建資料結構,可以用來儲存任何物件集合,它們分別是列表、元組、字典和集合。python有兩個有序的集合資料結構(列表和元組),列表是其中之一。
1. 列表的概念
列表是一個有序的可變物件索引集合,列表中的每個物件從0開始編號。
與陣列不同的是:
1)列表是異構的。可以在一個列表中存放不同型別的物件 ,且不需要預宣告所有儲存的物件的型別
2)列表是動態的。可以根據需要擴充套件和收縮,使用列表儲存任何物件之前不需要預宣告列表的大小
3)列表是可變的。可以在任何時間通過增加、刪除或者修改物件來修改列表。
2. 列表的建立
列表總是用中括號包圍,並且列表中包含的物件之間總是用逗號分隔。列表的建立有兩種方式,一種是按字面建立另一種是在程式碼中為列表追加或者擴充套件物件。如下圖就是字面建立。
也可以在執行時“擴充套件列表”。列表提供了一組內建方法,可以用來處理列表的物件。要呼叫一個方法,可以使用點記法語法:在列表名後面加一個點號和方法呼叫。對於現在來說,我們先使用append方法在建立的空列表末尾增加物件。
3. 列表的特性
1)索引
service = ['http','ssh','ftp']
print(service[0]) //正向索引
print(service[-1]) //反向索引
2)切片
print(service[::-1]) //列表的反轉 print(service[1::]) //除了第一個之外的其他元素 print(service[:-1]) //除了最後一個之外的其他元素
3)重複
4)連線
5)成員操作符
如何檢查一個列表中是否包含某個物件呢?用“in”來檢查。
除了使用in操作符檢查一個物件是否包含在一個列表中,還可以使用not in操作符組合來檢查一個列表中是否不存在某個物件。
6)列表中巢狀列表
4. 列表的增加
append:追加,追加一個物件到列表中
insert:在索引位置插入物件
extend:拉伸,追加多個物件到列表中
append和extend的區別:
5. 列表的刪除
pop:可以根據物件的索引值從列表中刪除和返回一個物件。如果呼叫pop時沒有指定索引值,將刪除和返回列表中的最後一個物件。如果指定了一個索引值,則會刪除和返回那個位置上的物件。如果列表為空或者呼叫pop時指定了一個不存在的索引值,直譯器會產生一個錯誤。
remove:從列表中刪除指定資料值的第一次出現。如果在列表中找到了這個資料值,就會從列表中刪除包含這個值的物件。如果在列表中沒有找到這個資料值,直譯器會產生一個錯誤。
claer:清空列表裡面的所有元素
del:(python關鍵字) 從記憶體中刪除列表或指定物件
6. 列表的修改
通過索引,重新賦值
通過切片
7. 列表的檢視
count:檢視物件出現的次數
index:檢視指定物件的索引值,返回的是指定資料值第一次出現的索引值。也可以指定範圍
sort:排序檢視(按照ascii碼進行排序)
由於字母大小寫的ascii碼值不一樣,所以排序出來大寫在小寫前面。
對字串排序不區分大小寫的方法如下。
8. 列表的練習
1)
2)實現“棧”
info = """
***********資料結構之棧***********
1.入棧
2.出棧
3.棧頂元素
4.棧的長度
5.棧是否為空
q.退出
"""
print(info)
stack = []
while True:
choice = input('請輸入你的選擇:')
if choice == '1':
item = int(input('請輸入你要入棧的元素:'))
stack.append(item)
print("入棧成功,入棧元素為%s" %(item))
print(stack)
elif choice == '2':
if not stack:
print("棧為空,無法出棧")
else:
item = stack.pop()
print("出棧成功,出棧元素為%s" %(item))
print(stack)
elif choice == '3':
if len(stack) == '0':
print("棧為空")
else:
item = stack[-1]
print("棧頂元素為%s" %(item))
elif choice == '4':
print("棧的長度為%s" %(len(stack)))
elif choice == '5' :
if not stack:
print("棧為空")
else:
print("棧不為空")
print(stack)
elif choice =='q' :
break
else:
print("請輸入正確的選擇")
3)使用者管理系統
users = ['potizo', 'zoe']
passwds = ['123', '456']
# 嘗試登陸的次數
trycount = 0
while trycount < 3:
inuser = input('使用者名稱:')
inpasswd = input('密碼:')
# 嘗試次數加1
trycount += 1
if inuser in users:
# 判斷使用者密碼是否正確
index = users.index(inuser)
passwd = passwds[index]
if inpasswd == passwd:
print('%s登陸成功' % (inuser))
break
else:
print('%s登陸失敗:密碼錯誤' % (inuser))
else:
print('使用者%s不存在' % (inuser))
else:
print('已經超過3次機會了~')