python簡單學------------python基礎-列表,元祖,字典等
列表介紹
想一想:
前面學習的字串可以用來儲存一串資訊,那麼想一想,怎樣儲存咱們班所有同學的名字呢?
定義100個變數,每個變數存放一個學生的姓名可行嗎?有更好的辦法嗎?
答:
列表
<1>列表的格式
變數A的型別為列表
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
比C語言的陣列強大的地方在於列表中的元素可以是不同型別的
testList = [1, 'a']
<2>列印列表
demo:
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
print(namesList[0])
print(namesList[1]) print(namesList[2])
結果:
xiaoWang
xiaoZhang
xiaoHua
列表的迴圈遍歷
1. 使用for迴圈
為了更有效率的輸出列表的每個資料,可以使用迴圈來完成
demo:
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
for name in namesList: print(name)
結果:
xiaoWang
xiaoZhang
xiaoHua
2. 使用while迴圈
為了更有效率的輸出列表的每個資料,可以使用迴圈來完成
demo:
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
length = len(namesList)
i = 0
while i<length: print(namesList[i]) i+=1
結果:
xiaoWang
xiaoZhang
xiaoHua
列表的相關操作
列表中存放的資料是可以進行修改的,比如"增"、"刪"、"改""
<1>新增元素("增"append, extend, insert)
append
通過append可以向列表新增元素
demo:
#定義變數A,預設有3個元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
print("-----新增之前,列表A的資料-----") for tempName in A: print(tempName) #提示、並新增元素 temp = input('請輸入要新增的學生姓名:') A.append(temp) print("-----新增之後,列表A的資料-----") for tempName in A: print(tempName)
結果:
extend
通過extend可以將另一個集合中的元素逐一新增到列表中
>>> a = [1, 2]
>>> b = [3, 4] >>> a.append(b) >>> a [1, 2, [3, 4]] >>> a.extend(b) >>> a [1, 2, [3, 4], 3, 4]
insert
insert(index, object) 在指定位置index前插入元素object
>>> a = [0, 1, 2]
>>> a.insert(1, 3) >>> a [0, 3, 1, 2]
<2>修改元素("改")
修改元素的時候,要通過下標來確定要修改的是哪個元素,然後才能進行修改
demo:
#定義變數A,預設有3個元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
print("-----修改之前,列表A的資料-----") for tempName in A: print(tempName) #修改元素 A[1] = 'xiaoLu' print("-----修改之後,列表A的資料-----") for tempName in A: print(tempName)
結果:
-----修改之前,列表A的資料-----
xiaoWang
xiaoZhang
xiaoHua
-----修改之後,列表A的資料-----
xiaoWang
xiaoLu
xiaoHua
<3>查詢元素("查"in, not in, index, count)
所謂的查詢,就是看看指定的元素是否存在
in, not in
python中查詢的常用方法為:
- in(存在),如果存在那麼結果為true,否則為false
- not in(不存在),如果不存在那麼結果為true,否則false
demo
#待查詢的列表
nameList = ['xiaoWang','xiaoZhang','xiaoHua']
#獲取使用者要查詢的名字 findName = input('請輸入要查詢的姓名:') #查詢是否存在 if findName in nameList: print('在字典中找到了相同的名字') else: print('沒有找到')
結果1:(找到)
結果2:(沒有找到)
說明:
in的方法只要會用了,那麼not in也是同樣的用法,只不過not in判斷的是不存在
index, count
index和count與字串中的用法相同
>>> a = ['a', 'b', 'c', 'a', 'b'] >>> a.index('a', 1, 3) # 注意是左閉右開區間 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 'a' is not in list >>> a.index('a', 1, 4) 3 >>> a.count('b') 2 >>> a.count('d') 0
<4>刪除元素("刪"del, pop, remove)
類比現實生活中,如果某位同學調班了,那麼就應該把這個條走後的學生的姓名刪除掉;在開發中經常會用到刪除這種功能。
列表元素的常用刪除方法有:
- del:根據下標進行刪除
- pop:刪除最後一個元素
- remove:根據元素的值進行刪除
demo:(del)
movieName = ['加勒比海盜','駭客帝國','第一滴血','指環王','霍位元人','速度與激情'] print('------刪除之前------') for tempName in movieName: print(tempName) del movieName[2] print('------刪除之後------') for tempName in movieName: print(tempName)
結果:
------刪除之前------
加勒比海盜
駭客帝國
第一滴血
指環王
霍位元人
速度與激情
------刪除之後------
加勒比海盜
駭客帝國
指環王
霍位元人
速度與激情
demo:(pop)
movieName = ['加勒比海盜','駭客帝國','第一滴血','指環王','霍位元人','速度與激情'] print('------刪除之前------') for tempName in movieName: print(tempName) movieName.pop() print('------刪除之後------') for tempName in movieName: print(tempName)
結果:
------刪除之前------
加勒比海盜
駭客帝國
第一滴血
指環王
霍位元人
速度與激情
------刪除之後------
加勒比海盜
駭客帝國
第一滴血
指環王
霍位元人
demo:(remove)
movieName = ['加勒比海盜','駭客帝國','第一滴血','指環王','霍位元人','速度與激情'] print('------刪除之前------') for tempName in movieName: print(tempName) movieName.remove('指環王') print('------刪除之後------') for tempName in movieName: print(tempName)
結果:
------刪除之前------
加勒比海盜
駭客帝國
第一滴血
指環王
霍位元人
速度與激情
------刪除之後------
加勒比海盜
駭客帝國
第一滴血
霍位元人
速度與激情
<5>排序(sort, reverse)
sort方法是將list按特定順序重新排列,預設為由小到大,引數reverse=True可改為倒序,由大到小。
reverse方法是將list逆置。
>>> a = [1, 4, 2, 3] >>> a [1, 4, 2, 3] >>> a.reverse() >>> a [3, 2, 4, 1] >>> a.sort() >>> a [1, 2, 3, 4] >>> a.sort(reverse=True) >>> a [4, 3, 2, 1]
列表的巢狀
1. 列表巢狀
類似while迴圈的巢狀,列表也是支援巢狀的
一個列表中的元素又是一個列表,那麼這就是列表的巢狀
schoolNames = [['北京大學','清華大學'],
['南開大學','天津大學','天津師範大學'], ['山東大學','中國海洋大學']]
2. 應用
一個學校,有3個辦公室,現在有8位老師等待工位的分配,請編寫程式,完成隨機的分配
#encoding=utf-8
import random
# 定義一個列表用來儲存3個辦公室
offices = [[],[],[]]
# 定義一個列表用來儲存8位老師的名字
names = ['A','B','C','D','E','F','G','H'] i = 0 for name in names: index = random.randint(0,2) offices[index].append(name) i = 1 for tempNames in offices: print('辦公室%d的人數為:%d'%(i,len(tempNames))) i+=1 for name in tempNames: print("%s"%name,end='') print("\n") print("-"*20)
執行結果如下:
元組
Python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。
>>> aTuple = ('et',77,99.9)
>>> aTuple ('et',77,99.9)
<1>訪問元組
<2>修改元組
說明: python中不允許修改元組的資料,包括不能刪除其中的元素。
<3>元組的內建函式count, index
index和count與字串和列表中的用法相同
>>> a = ('a', 'b', 'c', 'a', 'b') >>> a.index('a', 1, 3) # 注意是左閉右開區間 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: tuple.index(x): x not in tuple >>> a.index('a', 1, 4) 3 >>> a.count('b') 2 >>> a.count('d') 0
字典介紹
想一想:
如果有列表
nameList = ['xiaoZhang', 'xiaoWang', 'xiaoLi'];
需要對"xiaoWang"這個名字寫錯了,通過程式碼修改:
nameList[1] = 'xiaoxiaoWang'
如果列表的順序發生了變化,如下
nameList = ['xiaoWang', 'xiaoZhang', 'xiaoLi'];
此時就需要修改下標,才能完成名字的修改
nameList[0] = 'xiaoxiaoWang'
有沒有方法,既能儲存多個數據,還能在訪問元素的很方便就能夠定位到需要的那個元素呢?
答:
字典
另一個場景:
學生資訊列表,每個學生資訊包括學號、姓名、年齡等,如何從中找到某個學生的資訊?
>>> studens = [[1001, "王寶強", 24], [1002, "馬蓉", 23], [1005, "宋喆",24], ...]
迴圈遍歷? No!
<1>生活中的字典
<2>軟體開發中的字典
變數info為字典型別:
info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
說明:
- 字典和列表一樣,也能夠儲存多個數據
- 列表中找某個元素時,是根據下標進行的
- 字典中找某個元素時,是根據'名字'(就是冒號:前面的那個值,例如上面程式碼中的'name'、'id'、'sex')
- 字典的每個元素由2部分組成,鍵:值。例如 'name':'班長' ,'name'為鍵,'班長'為值
<3>根據鍵訪問值
info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'} print(info['name']) print(info['address'])
結果:
班長
地球亞洲中國北京
若訪問不存在的鍵,則會報錯:
>>> info['age']
Traceback (most recent call last):
File "<stdin>", line 1, in <module> KeyError: 'age'
在我們不確定字典中是否存在某個鍵而又想獲取其值時,可以使用get方法,還可以設定預設值:
>>> age = info.get('age')
>>> age #'age'鍵不存在,所以age為None
>>> type(age) <type 'NoneType'> >>> age = info.get('age', 18) # 若info中不存在'age'這個鍵,就返回預設值18 >>> age 18
字典的常見操作1
<1>修改元素
字典的每個元素中的資料是可以修改的,只要通過key找到,即可修改
demo:
info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'} newId = input('請輸入新的學號') info['id'] = int(newId) print('修改之後的id為%d:'%info['id'])
結果:
<2>新增元素
demo:訪問不存在的元素
info = {'name':'班長', 'sex':'f', 'address':'地球亞洲中國北京'} print('id為:%d'%info['id'])
結果:
如果在使用 變數名['鍵'] = 資料 時,這個“鍵”在字典中,不存在,那麼就會新增這個元素
demo:新增新的元素
info = {'name':'班長', 'sex':'f', 'address':'地球亞洲中國北京'} # print('id為:%d'%info['id'])#程式會終端執行,因為訪問了不存在的鍵 newId = input('請輸入新的學號') info['id'] = newId print('新增之後的id為:%d'%info['id'])
結果:
請輸入新的學號188
新增之後的id為: 188
<3>刪除元素
對字典進行刪除操作,有一下幾種:
- del
- clear()
demo:del刪除指定的元素
info = {'name':'班長', 'sex':'f', 'address':'地球亞洲中國北京'} print('刪除前,%s'%info['name']) del info['name'] print('刪除後,%s'%info['name'])
結果
demo:del刪除整個字典
info = {'name':'monitor', 'sex':'f', 'address':'China'} print('刪除前,%s'%info) del info print('刪除後,%s'%info)
結果
demo:clear清空整個字典
info = {'name':'monitor', 'sex':'f', 'address':'China'} print('清空前,%s'%info) info.clear() print('清空後,%s'%info)
結果
字典的常見操作2
<1>len()
測量字典中,鍵值對的個數
<2>keys
返回一個包含字典所有KEY的列表
<3>values
返回一個包含字典所有value的列表
<4>items
返回一個包含所有(鍵,值)元祖的列表
<5>has_key
dict.has_key(key)如果key在字典中,返回True,否則返回False
遍歷
通過for ... in ...:的語法結構,我們可以遍歷字串、列表、元組、字典等資料結構。
注意python語法的縮排
字串遍歷
>>> a_str = "hello itcast"
>>> for char in a_str: ... print(char,end=' ') ... h e l l o i t c a s t
列表遍歷
>>> a_list = [1, 2, 3, 4, 5] >>> for num in a_list: ... print(num,end=' ') ... 1 2 3 4 5
元組遍歷
>>> a_turple = (1, 2, 3, 4, 5) >>> for num in a_turple: ... print(num,end=" ") 1 2 3 4 5
字典遍歷
<1> 遍歷字典的key(鍵)
<2> 遍歷字典的value(值)
<3> 遍歷字典的項(元素)
<4> 遍歷字典的key-value(鍵值對)
想一想,如何實現帶下標索引的遍歷
>>> chars = ['a', 'b', 'c', 'd'] >>> i = 0 >>> for chr in chars: ... print("%d %s"%(i, chr)) ... i += 1 ... 0 a 1 b 2 c 3 d
enumerate()
>>> chars = ['a', 'b', 'c', 'd'] >>> for i, chr in enumerate(chars): ... print i, chr ... 0 a 1 b 2 c 3 d