函數,列表,元組,集合,字典,None,解析

1.函數

調用方法通過名稱將值傳入函數的時候參數的順序可以改變(注意改變順序需要把所有的參數都填上),但是當有一個參數通過名稱傳值其右邊的所有參數都需要通過名稱傳值,否則報錯。同樣當一個函數的一個參數設有默認值時其右邊的所有參數都需要設置默認值。

def testParams(age, flag):
    money = 500 if flag else 5 #相當于java mony = flag ? 500 : 5
    ...

testParams(flag=False, age=1)正確
testParams(age=1, False) #錯誤 第二個參數也需要通過名稱傳值flag=False

def testParams(age, name='cheny', flag): #錯誤 flag也需要指定默認值

2.列表

列表的創建:
a_list = ["a", "b", "mpilgrim", "z", "example"]
獲取列表的元素

a_list[0] == "a"
a_list[-1] == "example"
可以使用計算公式a_list[-n] == a_list[len(a_list) -n]

列表的切片

a_list[:3] == a_list[0:3]
a_list[:] == alist[0:len(a_list)]

向列表中新增加項的四種方式

a_list =[1]

  • a_list + [2, 'hello'] 結果為[1, 2, 'hello']
  • a_list.append([2, 'hello']) 結果為[1, [2, 'hello']]
    或者a_list.append('hello')結果為[1, 'hello']
  • a_list.extend([2, 'hello']) 結果為[1, 2 , 'hello']
    注意extend特別的地方a_list.extend('hello')結果為[1, 'h', 'e', 'l', 'l', 'o']而不是[1, 'hello']
  • a_list.insert(0, 'hello')結果為['hello', 1]

append()與extend()的區別,都只接收一個參數但是列表調用append()方法添加的只是一個對象,而extend方法添加的是一個或多個對象

在列表中檢索值

a_list = ["a", "b", "new", "mpilgrim", "new"]
a_list.count('new') == 2 返回列表中某個特定值出現的次數。
a_list.index('new') == 2 只返回第一次出現的位置索引值。

從列表中刪除元素

1.根據索引刪除
del a_list[1] 刪除列表中第二個元素
2.根據值刪除
a_list.remove('new') 刪除列表中第一次出現的new元素,
例如:a_list = ["a", "b", "new", "mpilgrim", "new"]執行a_list.remove('new') 后結果為["a", "b", "mpilgrim", "new"]
3.帶返回值的刪除
a_list.pop()或者a_list.pop(1)
pop()不帶參數的調用將刪除列表中最后一個元素并返回所刪除的值
pop(1)類似于del a_list[1]刪除列表中第二個元素,但是相比del pop(1)將會返回被刪除的值。
對與空列表調用pop()將會報錯

修改列表中的值

a_list = [0, 'hello']
a_list[0] = 1 結果為[1, 'hello']

布爾上下文環境中的列表

在布爾類型上下文環境中,空列表為假值。
任何至少包含一個上元素的列表為真值。

a_list = []
if a_list:
    print('True')
else:
    print('False')

False

3.元組

元組是不可變的列表。一旦創建之后,用任何方法都不可以修改元素

a_tuple = ("a", "b", "mpilgrim", "z", "example")

元組不能添加刪除修改元素,沒有append()、 extend()、 insert()、remove() 和 pop() 這樣的方法
元組可以切片a_tuple[:2],可以查找元素a_tuple.index('example'),還可以使用in運算符檢查某個元素是否存在于元組中

使用元組相比列表的優點:

  • 元組的速度比列表更快。如果定義了一系列常量值,而所需做的僅是對它進行遍歷,那么請使用元組替代列表
  • 對不需要改變的數據進行“寫保護”將使得代碼更加安全。使用元組替代列表就像是有一條隱含的 assert 語句顯示該數據是常量,特別的想法(及特別的功能)必須重寫。(??)
  • 一些元組可用作字典鍵(特別是包含字符串、數值和其它元組這樣的不可變數據的元組)。列表永遠不能當做字典鍵使用,因為列表不是不可變的。

元組與列表可以相互轉換。內建的 tuple() 函數接受一個列表參數,并返回一個包含同樣元素的元組,而 list() 函數接受一個元組參數并返回一個列表。從效果上看, tuple() 凍結列表,而 list() 融化元組。

注意:元組使用圓括號定義( ),列表使用方括號[ ]定義。

創建單元素元組

如果創建單元素元組,需要在值之后加上一個逗號。沒有逗號Python并不會創建元組。
a_tuple = ('hello') #不會創建元組
a_tuple = ('hello', ) #正確創建單元素元組

通過元組給變量同時賦多個值

(x, y, z) = ('a', '2', 'c')
輸出x == ‘a’, y == '2', z == 'c'

該特性有多種用途。假設需要將某個名稱指定某個特定范圍的值??梢允褂脙冉ǖ?range() 函數進行多變量賦值以快速地進行連續變量賦值。例如:

(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)

結果:MONDAY == 1 , TUESDAY == 2,... SUNDAY ==7

說明:內建的 range() 函數構造了一個整數序列。(從技術上來說, range() 函數返回的既不是列表也不是元組,而是一個 迭代器。

4.集合

集合的創建:
a_set = {1, 2}
創建一個空集合應該使用set()函數 如:a_set = set() ,而不是a_set={}這種方式將會創建一個空字典

實際上集合以類的形式實現。
將列表轉換為集合調用set()函數,例如:a_set = set(a_list) 同時也能通過list()函數將集合轉為列表。
注意:調用set()函數這實際上并不是調用某個函數,而是對某個類進行實例化。

集合是無序的,使用set()函數將列表轉為集合時,元素順序將會被打亂。不僅如此,每次使用該集合時元素順序相比上次都可能不同

例如:

a_list = ["a", "b", "mpilgrim", True, False, 42]
a_set = set(a_list)
print(a_set)

輸出結果:{False, True, 42, 'b', 'mpilgrim', 'a'}
向集合中添加值

有兩種方法向現有的集合中添加值:add()和update()
add()只接收單個數據類型參數
update()接收一個或多個集合,列表,元組。

集合元素是不可重復的,每個元素都是唯一值。如果添加一個集合中已有的值,只是一條空操作。

從集合中刪除元素

有三種方法可以用來從集合中刪除某個值。discard(),remove(),pop()
discard()與remove()都是通過值刪除,唯一的區別是,當刪除一個列表中不存在的值時discard()不報錯,remove()報錯。
pop()方法帶返回值的刪除。由于集合是無序的,并沒有“最后一個”值的概念,因此無法控制刪除的是哪一個值。它基本是隨機的。

clear()方法刪除集合中所有的值。相當于a_set = set()

常見集合操作

1.union() 方法返回一個新集合,其中裝著 在兩個 集合中出現的元素。
2.intersection() 方法返回一個新集合,其中裝著 同時 在兩個集合中出現的所有元素。
3.difference() 方法返回的新集合中,裝著所有在a_set出現但未在b_set中的元素。
4.symmetric_difference() 方法返回一個新集合,其中裝著所有 只在其中一個 集合中出現的元素 。
5.issubset()檢查一個集合是否為另一個集合的子集。
6.issuperset()檢查一個集合是否為另一個集合的父集。

5.字典

字典是鍵值對的無序集合。
字典的創建
a_dict = {"server": "db.diveintopython3.org", "database": "mysql"}
創建空字典a_dict = {}

字典的修改

a_dict = {"server": "db.diveintopython3.org", "database": "mysql"}
修改:a_dict["database"] = "blog" # {"server": "db.diveintopython3.org", "database": "blog"}
添加:a_dict["user"] = "cheny" # {"server": "db.diveintopython3.org", "database": "blog", "user": "cheny"}
1.在字典中不允許有重復的鍵。對現有的鍵賦值將會覆蓋舊值
2.字典鍵是區分大小寫的

混合值字典

字典的值可以是任何數據類型,包括整數、布爾值、任何對象,甚至是其它的字典。而且就算在同一字典中,所有的值也無須是同一類型, 您可根據需要混合匹配。字典的鍵要嚴格得多,可以是字符串、整數和其它一些類型。在同一字典中也可混合、匹配使用不同數據類型的鍵。

字典與列表之間同樣可以通過dict()方法與list()方法相互轉換

6.None

None 是 Python 的一個特殊常量。它是一個空值。None 與 False 不同。None 不是 0 。None 不是空字符串。將 None 與任何非 None 的東西進行比較將總是返回 False 。

7.列表解析

a_list = [1, 9, 8, 4]
b_list = [b * 2 for b in a_list]
print(b_list) #[2, 18, 16, 8]
b_list = [b * 2 for b in a_list if b > 1] #注意if后面的b是列表中的元素,而不是* 2之后的b,b * 2是最后執行的
print(b_list) #[18, 16, 8] 

b_list = [(b * 2, b - 1) for b in a_list if b > 1]
print(b_list) #[(18, 8), (16, 7), (8, 3)]

8.集合解析同列表解析。

9.字典解析

a_list = ['chenyou', 23, 'man']
b_list = ['name', 'age', 'sex']
a_dict = {f: a_list[index] for index, f in enumerate(b_list)}
print(a_dict) #{'name': 'chenyou', 'age': 23, 'sex': 'man'}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容