字典是另一種可變容器模型,且可以存儲任意類型對象。
字典的每一個鍵值(key=>value)對用冒號(:)分割,每個鍵值對之間用逗號(,)分割,整個字典包括在花括號({})中,格式如下所示:
dict ={key1:value1,key2:value2}
注意:鍵必須是唯一的,但是值不一定。也就是說,值可以取任意類型,但是鍵必須是不可變類型,例如字符串,數字或元組。
給出三種創建元組的例子:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} dict1 = { 'abc': 456 }; dict2 = { 'abc': 123, 98.6: 37 };
假設字典定義如下:
#!/usr/bin/python3 dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
訪問方法如下:
print ("dict['Name']: ", dict['Name']) print ("dict['Age']: ", dict['Age'])
程序結果如下:
dict['Name']: Runoob dict['Age']: 7
向字典添加新內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對如下實例:
#!/usr/bin/python3 dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} dict['Age'] = 8; # 更新 Age dict['School'] = 學習" # 添加信息 print ("dict['Age']: ", dict['Age']) print ("dict['School']: ", dict['School'])
程序輸出結果:
dict['Age']: 8 dict['School']: 學習
能刪單一的元素也能清空字典,清空只需一項操作。
顯示刪除一個字典用del命令,如下實例:
#!/usr/bin/python3 dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} del dict['Name'] # 刪除鍵 'Name' dict.clear() # 清空字典 del dict # 刪除字典 print ("dict['Age']: ", dict['Age']) print ("dict['School']: ", dict['School'])
但這會引發一個異常,因爲用執行 del 操作後字典不再存在:
Traceback (most recent call last): File "test.py", line 9, in <module> print ("dict['Age']: ", dict['Age']) TypeError: 'type' object is not subscriptable
字典值可以是任何的 python 對象,既可以是標準的對象,也可以是用戶定義的,但鍵不行。
兩個重要的點需要記住:
(1)不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,後一個值會被記住,如下實例:
#!/usr/bin/python3 dict = {'Name': 'Runoob', 'Age': 7, 'Name': '紅色'} print ("dict['Name']: ", dict['Name'])
程序輸出如下:
dict['Name']: 紅色
(2)鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行,如下實例:
#!/usr/bin/python3 dict = {['Name']: 'Runoob', 'Age': 7} print ("dict['Name']: ", dict['Name'])
程序輸出如下:
Traceback (most recent call last): File "test.py", line 3, in <module> dict = {['Name']: 'Runoob', 'Age': 7} TypeError: unhashable type: 'list'
1.3.5字典內置函數&方法
(1)Python字典包含了以下內置函數:
(2)Python字典包含了以下內置方法:
集合(set)是一個無序的不重複元素序列。
可以使用大括號 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因爲 { } 是用來創建一個空字典。
創建格式:
parame = {value01,value02,...} 或者 set(value)
>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} >>> print(basket) # 這裏演示的是去重功能 {'orange', 'banana', 'pear', 'apple'} >>> 'orange' in basket # 快速判斷元素是否在集合內 True >>> 'crabgrass' in basket False >>> # 下面展示兩個集合間的運算. ... >>> a = set('abracadabra') >>> b = set('alacazam') >>> a {'a', 'r', 'b', 'c', 'd'} >>> a - b # 集合a中包含而集合b中不包含的元素 {'r', 'd', 'b'} >>> a | b # 集合a或b中包含的所有元素 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # 集合a和b中都包含了的元素 {'a', 'c'} >>> a ^ b # 不同時包含於a和b的元素 {'r', 'd', 'b', 'm', 'z', 'l'}
類似列表推導式,同樣集合支持集合推導式(Set comprehension):
>>>a = {x for x in 'abracadabra' if x not in 'abc'} >>> a {'r', 'd'}
s.add( x )
將元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.add("Facebook") >>> print(thisset) {'Taobao', 'Facebook', 'Google', 'Runoob'}
還有一個方法,也可以添加元素,且參數可以是列表,元組,字典等,語法格式如下:
s.update( x )
x 可以有多個,用逗號分開。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.update({1,3}) >>> print(thisset) {1, 3, 'Google', 'Taobao', 'Runoob'} >>> thisset.update([1,4],[5,6]) >>> print(thisset) {1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'} >>>
s.remove( x )
將元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.remove("Taobao") >>> print(thisset) {'Google', 'Runoob'} >>> thisset.remove("Facebook") # 不存在會發生錯誤 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Facebook' >>>
此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:
s.discard(x)
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.discard("Facebook") # 不存在不會發生錯誤 >>> print(thisset) {'Taobao', 'Google', 'Runoob'}
我們也可以設置隨機刪除集合中的一個元素,語法格式如下:
s.pop()
thisset = set(("Google", "Runoob", "Taobao", "Facebook")) x = thisset.pop() print(x)
輸出如下(隨機刪除,所以可能咱們的結果不一樣):
Runoob
多次執行測試結果都不一樣。
然而在交互模式,pop 是刪除集合的第一個元素(排序後的集合的第一個元素)。
>>>thisset = set(("Google", "Runoob", "Taobao", "Facebook")) >>> thisset.pop() 'Facebook' >>> print(thisset) {'Google', 'Taobao', 'Runoob'} >>>
len(s)
計算集合 s 元素個數。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> len(thisset) 3
s.clear()
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.clear() >>> print(thisset) set()
x in s
判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> "Runoob" in thisset True >>> "Facebook" in thisset False >>>
Python條件語句是通過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
Python 中用 elif 代替了 else if,所以if語句的關鍵字爲:if – elif – else。
注意:
#!/usr/bin/python3 var1 = 100 if var1: print ("1 - if 表達式條件爲 true") print (var1) var2 = 0 if var2: print ("2 - if 表達式條件爲 true") print (var2) print ("Good bye!")
程序輸出爲:
1 - if 表達式條件爲 true 100 Good bye!
從結果可以看到由於變量 var2 爲 0(False),所以對應的 if 內的語句沒有執行。
補充:以下爲if中常用的操作運算符:
#!/usr/bin/python3 # 程序演示了 == 操作符 # 使用數字 print(5 == 6) # 使用變量 x = 5 y = 8 print(x == y)
程序輸出爲:
False False
在嵌套 if 語句中,可以把 if...elif...else 結構放在另外一個 if...elif...else 結構中。
if 表達式1: 語句 if 表達式2: 語句 elif 表達式3: 語句 else: 語句 elif 表達式4: 語句 else: 語句
# !/usr/bin/python3 num=int(input("輸入一個數字:")) if num%2==0: if num%3==0: print ("你輸入的數字可以整除 2 和 3") else: print ("你輸入的數字可以整除 2,但不能整除 3") else: if num%3==0: print ("你輸入的數字可以整除 3,但不能整除 2") else: print ("你輸入的數字不能整除 2 和 3")
將以上程序保存到 test_if.py 文件中,執行後輸出結果爲:
$ python3 test.py 輸入一個數字:6 你輸入的數字可以整除 2 和 3
Python 中沒有像 C 語言中一樣直接使用 x?a:b 這樣的三元表達式,但是它有兩種替代方法:
(1)方法一:
a if x else b
該程序含義爲:如果 x 爲 True,返回 a;否則返回 b
>>> 'True' if 2 > 1 else 'False' 'True' >>> 'True' if 2 < 1 else 'False' 'False' >>>
(2)方法二:
利用 and or 短路運算的特點
and 運算時,例如 a and b,如果 a 爲 False 就不再判斷b的值。
or運算時,例如 a or b,如果 a 爲 True 就不再判斷 b 的值。
假設表達式爲:x and a or b。如果 x 爲 True,會接着判斷 a,如果 a 等同True,就返回 a 的值。
如果 a 等同 False,就計算 b,返回 b 的值。如果你覺得有點繞,直接看下面的例子:
>>> 2 > 1 and 'True' or 'False' 'True' >>> 2 < 1 and 'True' or 'False' 'False'
注意:但這種方法有個坑,如果 a 爲 "",即空串,對它作真假值判斷時會返回 False,與我們的假設不符。
>>> 2 > 1 and '' or 'False' 'False'
這裏本應該返‘’,但是返回False,與假設不符,這是坑的地方。
當然,機智的網友找到了修補的方法,那就是把 a 和 b 用列表包起來。因爲即使包含空串元素的列表,其表達式依然等同 True
上面的例子包裹後變成下面這樣:
>>> (2 > 1 and [''] or ['False'])[0] '' >>> 2 > 1 and [''] or ['False'] ['']
可以看到,這種方法很多餘,也很麻煩,構造了兩個列表不說,最後還得依賴下標運算把想要的值取出來。
所以推薦使用第一種方法。比較好理解,也沒有坑。
Python中的循環語句有 for 和 while
Python中while語句的一般形式:
while 判斷條件: 語句
同樣需要注意冒號和縮進。另外,在Python中沒有do..while循環。
以下實例使用了 while 來計算 1 到 100 的總和:
#!/usr/bin/env python3 n = 100 sum = 0 counter = 1 while counter <= n: sum = sum + counter counter += 1 print("1 到 %d 之和爲: %d" % (n,sum))
程序輸出如下:
1 到 100 之和爲: 5050
我們可以通過設置條件表達式永遠不爲 false 來實現無限循環,實例如下:
#!/usr/bin/python3 var = 1 while var == 1 : # 表達式永遠爲 true num = int(input("輸入一個數字 :")) print ("你輸入的數字是: ", num) print ("Good bye!")
執行以上程序,輸出結果如下:
輸入一個數字 :5 你輸入的數字是: 5 輸入一個數字 :
你可以使用 CTRL+C 來退出當前的無限循環。
無限循環在服務器上客戶端的實時請求非常有用。
在 while … else 在條件語句爲 false 時執行 else 的語句塊:
#!/usr/bin/python3 count = 0 while count < 5: print (count, " 小於 5") count = count + 1 else: print (count, " 大於或等於 5")
程序輸出爲:
0 小於 5 1 小於 5 2 小於 5 3 小於 5 4 小於 5 5 大於或等於 5
類似 if 語句的語法,如果你的while循環體中只有一條語句,你可以將該語句與while寫在同一行中, 如下所示:
#!/usr/bin/python flag = 1 while (flag): print ('歡迎訪問菜鳥教程!') print ("Good bye!")
程序輸出如下:(可以使用Ctrl+c來結束循環)
歡迎訪問菜鳥教程! 歡迎訪問菜鳥教程! 歡迎訪問菜鳥教程! 歡迎訪問菜鳥教程! 歡迎訪問菜鳥教程! ……
Python for循環可以遍歷任何序列的項目,如一個列表或者一個字符串。
for <variable> in <sequence>: <statements> else: <statements>
Python loop循環實例:
>>>languages = ["C", "C++", "Perl", "Python"] >>> for x in languages: ... print (x) ... C C++ Perl Python >>>
以下 for 實例中使用了 break 語句,break 語句用於跳出當前循環體:
#!/usr/bin/python3 sites = ["Baidu", "Google","Runoob","Taobao"] for site in sites: if site == "Runoob": print("菜鳥教程!") break print("循環數據 " + site) else: print("沒有循環數據!") print("完成循環!")
程序輸出如下:(在循環到 "Runoob"時會跳出循環體:)
循環數據 Baidu 循環數據 Google 菜鳥教程! 完成循環!
如果你需要遍歷數字序列,可以使用內置range()函數。它會生成數列,例如:
>>>for i in range(5): ... print(i) ... 0 1 2 3 4
你也可以使用range指定區間的值:
>>>for i in range(5,9) : print(i) 5 6 7 8 >>>
也可以使range以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做'步長'):
>>>for i in range(0, 10, 3) : print(i) 0 3 6 9 >>>
負數:
>>>for i in range(-10, -100, -30) : print(i) -10 -40 -70 >>>
您可以結合range()和len()函數以遍歷一個序列的索引,如下所示:
>>>a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ'] >>> for i in range(len(a)): ... print(i, a[i]) ... 0 Google 1 Baidu 2 Runoob 3 Taobao 4 QQ >>>
還可以使用range()函數來創建一個列表:
>>>list(range(5)) [0, 1, 2, 3, 4] >>>
break 語句可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中終止,任何對應的循環 else 塊將不執行。 實例如下:
#!/usr/bin/python3 for letter in 'Runoob': # 第一個實例 if letter == 'b': break print ('當前字母爲 :', letter) var = 10 # 第二個實例 while var > 0: print ('當期變量值爲 :', var) var = var -1 if var == 5: break print ("Good bye!")
程序輸出如下:
當前字母爲 : R 當前字母爲 : u 當前字母爲 : n 當前字母爲 : o 當前字母爲 : o 當期變量值爲 : 10 當期變量值爲 : 9 當期變量值爲 : 8 當期變量值爲 : 7 當期變量值爲 : 6 Good bye!
注意:可以看到執行到 break 的那裏的if的條件並不輸入,也就是不輸出「5」和「b」。
continue語句被用來告訴Python跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環。
#!/usr/bin/python3 for letter in 'Runoob': # 第一個實例 if letter == 'o': # 字母爲 o 時跳過輸出 continue print ('當前字母 :', letter) var = 10 # 第二個實例 while var > 0: var = var -1 if var == 5: # 變量爲 5 時跳過輸出 continue print ('當前變量值 :', var) print ("Good bye!")
程序輸出如下:
當前字母 : R 當前字母 : u 當前字母 : n 當前字母 : b 當前變量值 : 9 當前變量值 : 8 當前變量值 : 7 當前變量值 : 6 當前變量值 : 4 當前變量值 : 3 當前變量值 : 2 當前變量值 : 1 當前變量值 : 0 Good bye!
注意:continue的時候是,把條件中的那一個跳過,繼續循環其它,也就是把「b」和「5」跳過,繼續循環其它,break是遇到條件就跳出循環,這個是兩個不一樣的地方。
循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變爲 false (以while循環)導致循環終止時被執行,但循環被break終止時不執行。
如下實例用於查詢質數的循環例子:
#!/usr/bin/python3 for n in range(2, 10): for x in range(2, n): if n % x == 0: print(n, '等於', x, '*', n//x) break else: # 循環中沒有找到元素 print(n, ' 是質數')
程序輸出爲:
2 是質數 3 是質數 4 等於 2 * 2 5 是質數 6 等於 2 * 3 7 是質數 8 等於 2 * 4 9 等於 3 * 3
Python pass是空語句,是爲了保持程序結構的完整性。
pass 不做任何事情,一般用做佔位語句,如下實例
>>>while True: ... pass # 等待鍵盤中斷 (Ctrl+C)
最小的類:
>>>class MyEmptyClass: ... pass
以下實例在字母爲 o 時 執行 pass 語句塊:
#!/usr/bin/python3 for letter in 'Runoob': if letter == 'o': pass print ('執行 pass 塊') print ('當前字母 :', letter) print ("Good bye!")
執行以上腳本輸出結果爲:
當前字母 : R 當前字母 : u 當前字母 : n 執行 pass 塊 當前字母 : o 執行 pass 塊 當前字母 : o 當前字母 : b Good bye!
寫在最後:注意點比較多,用法也很多,還是多練習多看,好記性不如爛筆頭,慢慢來,什麼時候開始都不晚。
參考鏈接:
(1)http://www.runoob.com/python3/python3-loop.html
(2)https://blog.csdn.net/yilovexing/article/details/80571871