1. 程式人生 > >列表list,字典dict

列表list,字典dict

列表list

陣列是隻能儲存同一種資料型別的結構;
定義列表[]:可變資料型別,可以修改元素
In [1]: li = [1,1.2,"hello",(1,3,4),[1,4,5]]

In [10]: li[0] = 17

In [11]: li
Out[11]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5]]

定義元組():不可變資料型別,不能修改元素
In [7]: t = (12,1.2,"hello",(1,3,4),[1,4,5])

In [8]: t
Out[8]: (12, 1.2, 'hello', (1, 3, 4), [1, 4, 5
]) In [9]: t(0) = 13 File "<ipython-input-9-457695fb6382>", line 1 t(0) = 13 SyntaxError: can't assign to function call

這裡寫圖片描述

分析列表的特性(與元組作對比)
*索引
正向索引
In [12]: li[0]
Out[12]: 17

反向索引
In [13]: li[-1]
Out[13]: [1, 4, 5]

拿出最後一個元素,最後一個元素是列表,在拿出列表的第三個元素
In [14]: li[-1][1]
Out[14]: 4

*切片
去掉列表的第一個元素,[2
:]去掉列表的前兩個元素 In [15]: li[1:] Out[15]: [1.2, 'hello', (1, 3, 4), [1, 4, 5]] 逆序顯示 In [16]: li[::-1] Out[16]: [[1, 4, 5], (1, 3, 4), 'hello', 1.2, 17] *重複連線 In [17]: li * 2 Out[17]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5], 17, 1.2, 'hello', (1, 3, 4), [1, 4, 5]] 不建議使用此連線 In [18]: li1 = [88
,8.8] In [19]: li + li1 Out[19]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5], 88, 8.8] *成員操作符 In [27]: li Out[27]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5]] In [28]: 1.2 in li ##1.2在列表中 Out[28]: True In [29]: 17 not in li ##17不在列表li中 Out[29]: False 例: #!/usr/bin/python #coding:utf-8 '''' 1.使用者名稱和密碼分別存在列表中 使用者登入時判斷使用者是否註冊 2.使用者登入時,輸入使用者名稱和密碼,判斷是否登陸成功,使用者和密碼一一對應 3.使用者登入有三次機會,超過三次還未成功,則報錯 ''' print ("=======使用者登入======") trycount = 0 h = ['westos','root'] p = ['redhat','westos'] while trycount < 3: hostname = raw_input("使用者名稱稱:") # password = raw_input("使用者密碼:") if not hostname in h: print '使用者未註冊!' break else: password = raw_input("使用者密碼:") #if password == p[h.index(hostname)]: if hostname == h[p.index(password)]: print "登陸成功!" exit() else: if trycount < 2: print "登入失敗!" trycount += 1 else: print "超過三次,不可再登陸!"

這裡寫圖片描述
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

ip白名單:
*增
追加元素到列表的最後s.append()
In [20]: allow_ip = ['172.25.254.11','172.25.254.12','172.25.254.13']

In [21]: allow_ip.append('172.25.254.14')

In [22]: allow_ip
Out[22]: ['172.25.254.11', '172.25.254.12', '172.25.254.13', '172.25.254.14']

增加元素到列表的指定位置s.insert()
In [23]: allow_ip.insert(0,'172.25.254.10')

In [24]: allow_ip
Out[24]: 
['172.25.254.10',
 '172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14']

增加多個元素到列表最後s.extend()
iterable代表可迭代的(str,list,tupleIn [25]: allow_ip.extend(['172.25.254.15','172.25.254.16'])

In [26]: allow_ip
Out[26]: 
['172.25.254.10',
 '172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

*改
通過列表的索引,丟列表的某個索引重新賦值
In [31]: allow_ip[0] = '172.25.254.17'
In [32]: allow_ip
Out[32]: 
['172.25.254.17',
 '172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

統計某個元素在列表中出現的次數s.count()
In [33]: allow_ip.count('172.25.254.12')
Out[33]: 1

找到某個元素在列表中的索引值s.index()
In [34]: allow_ip.index('172.25.254.15')
Out[34]: 5


*刪除
刪除列表中遇到的第一個value值s.remove()
In [35]: allow_ip.remove('172.25.254.17')

In [36]: allow_ip
Out[36]: 
['172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

刪除列表中的第i個索引值del s[]

In [37]: del allow_ip[2]

In [38]: allow_ip
Out[38]: 
['172.25.254.11',
 '172.25.254.12',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

刪除除了第一個元素之外的其他索引值del s[i:]
In [39]: del allow_ip[1:]

In [40]: allow_ip
Out[40]: ['172.25.254.11']

刪除列表物件del s

In [41]: del allow_ip

刪除指定索引對應的值,預設是最後一個
In [4]: s = [1,2,3,45,56]
In [6]: s.pop(1)
Out[6]: 2

In [7]: s
Out[7]: [1, 3, 45, 56]

In [8]: s.pop()
Out[8]: 56

In [9]: s
Out[9]: [1, 3, 45]

*其他的排序及逆轉

排序,如果都是數字,按照數字大小排序,是字母的話按照ASCII碼來排序

In [12]: s = [11,2,9.56]

In [13]: s.sort()

In [14]: s
Out[14]: [2, 9.56, 11]



ord('i')   ##計算ASCII值

In [22]: s
Out[22]: [1, 2, 3, 'c', 'a']

In [23]: s.sort()

In [24]: s
Out[24]: [1, 2, 3, 'a', 'c']

逆轉s[::-1]或者s.reverse

In [15]: s.reverse()

In [16]: s
Out[16]: [11, 9.56, 2]

這裡寫圖片描述
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

這裡寫圖片描述

棧操作
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

隊操作:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

字典dict

*字典建立
-賦值建立字典
In [1]: a = {'name1':'passwd1','name2':'passwd2'}
In [3]: a
Out[3]: {'name1': 'passwd1', 'name2': 'passwd2'}

In [4]: servers = {'ssh':22,'ftp':[21,20],'http':[80,8080]}
In [5]: servers
Out[5]: {'ftp': [21, 20], 'http': [80, 8080], 'ssh': 22}

-通過工廠函式建立
In [6]: u = dict(user1='123',user2='234',user3='456')
In [7]: u
Out[7]: {'user1': '123', 'user2': '234', 'user3': '456'}

-通過字典的fromkeys方法建立字典,所有元素有一個預設值
In [8]: {}.fromkeys('westos')    ##如果沒有預設值,預設為None
Out[8]: {'e': None, 'o': None, 's': None, 't': None, 'w': None}

In [12]: {}.fromkeys(["name1","name2",'name3'],"123")    ##給每個元素設定預設值為123
Out[12]: {'name1': '123', 'name2': '123', 'name3': '123'}

例:生成多個銀行帳號,初始化密碼為‘000000#!/usr/bin/env python
#coding:utf-8
stack = []
for i in range(1,100):    ##i=1,2,3,4,5,6....
    a = '610%.3d'%(i)     ##卡號前六為為610,後面依次為001,002..100
    stack.append(a)
print {}.fromkeys(stack,'000000')

這裡寫圖片描述

這裡寫圖片描述

分析字典的特性
*字典不能索引和切片,因為字典是無序的型別:
*不支援重複連線
*支援成員操作符:是判斷字典的key值所記否在字典中,in ,not in


-增
通過字典名[key]=value,將key-value新增到字典中
In [1]: services = {'http':[80,80]}    ##key指http,value指 [80,80]

In [2]: services['ftp'] = [20,21]

In [3]: services
Out[3]: {'ftp': [20, 21], 'http': [80, 80]}


updat方法實現新增
In [4]: services = {'http':[80,80]}

In [5]: services.update(ftp=[20,21])

In [6]: services
Out[6]: {'ftp': [20, 21], 'http': [80, 80]}

setdefault實現新增:key存在,不覆蓋valueIn [6]: services = {'http':[80,80]}

In [7]: services.setdefault('ftp',21)
Out[7]: 21

In [8]: services 
Out[8]: {'ftp': 21, 'http': [80, 80]}

In [9]: services.setdefault('ftp',20)
Out[9]: 21

In [10]: services
Out[10]: {'ftp': 21, 'http': [80, 80]}


*改
update
*查
In [35]: services
Out[35]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

In [36]: services.keys()     ##給key起名
Out[36]: ['a', 'c', 'b', 'd']

In [37]: services.viewkeys()
Out[37]: dict_keys(['a', 'c', 'b', 'd'])

In [38]: services.iterkeys()
Out[38]: <dictionary-keyiterator at 0x2ca1100>

In [39]: services.values()    ##檢視value值
Out[39]: [1, 3, 2, 4]

In [40]: services     ##檢視key-value建值隊
Out[40]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}


*刪
d.pop
In [18]: services   ##固定刪
Out[18]: {'ftp': [20, 21], 'http': [80, 80], 'ssh': 22}

In [19]: services.pop('ftp')
Out[19]: [20, 21]

In [20]: services
Out[20]: {'http': [80, 80], 'ssh': 22}

d.popitem()  ##隨意刪一個
In [22]: services
Out[22]: {'a': 1, 'b': 2, 'c': 3, 'http': [80, 80], 'ssh': 22}

In [23]: services.popitem()
Out[23]: ('a', 1)

In [24]: services.popitem()
Out[24]: ('c', 3)

In [25]: services
Out[25]: {'b': 2, 'http': [80, 80], 'ssh': 22}

del d[key]   ##刪除key的字典元素
In [25]: services
Out[25]: {'b': 2, 'http': [80, 80], 'ssh': 22}

In [26]: del services['b']

In [27]: services
Out[27]: {'http': [80, 80], 'ssh': 22}


d.clear()    ##清空
In [27]: services
Out[27]: {'http': [80, 80], 'ssh': 22}

In [28]: services.clear()

In [29]: services
Out[29]: {}

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

迴圈遍歷字典

In [31]: services
Out[31]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

In [33]: for i,j in services.items():
   ....:     print i,j
   ....:     
a 1
c 3
b 2
d 4

#預設情況下便利字典的key值
In [34]: for i in services:
   ....:     print i
   ....:     
a
c
b
d

這裡寫圖片描述

例題:

#!/usr/bin/env python
#coding:utf-8
'''
實現四則運算
-使用者分別輸入第一個數字,運算操作符,第三個數字
-根據使用者的運算操作打印出結果
'''
from __future__ import division    ##進入3.x中,3.x中/輸出正確結果,2.x中/不正確
a = input('第一個數字:')
b = raw_input('操作字元:')
c = input('第二個數字:')
d = {
    '+':a+c,
    '-':a-c,
    '*':a*c,
    '/':a/c,
    }
if not b in d:
   print 'error'
else:
   print d[b]

這裡寫圖片描述
這裡寫圖片描述