1. 程式人生 > >python簡單學------------python基礎-列表,元祖,字典等

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