python四 list tuple set dict(列表,元組,集合,字典)

目錄

list tuple set dict(列表,元組,集合,字典)

列表(List)

列表的創建

列表索引,切片

列表操作

Python 元組

字典:dict

字典定義

字典操作


list tuple set dict(列表,元組,集合,字典)

這四種容器要注意淺複製與深度複製問題

如果容器內有二級元素存在,就存在淺複製與深度複製的問題

列表(List)

序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。可以進行的操作包括索引,切片,加,乘,檢查成員

 

列表的創建

list1 = [1, 2, 3, 4]
list1 = ['a', 'bb', 'china']
# 不需要有相同的數據類型
list1 = [1, 2, 'aab', True]

# 列表推導式
[表達式 for 變量 in 列表]
或者
[表達式 for 變量 in 列表 if 條件]

list1 = [i**4 for i in range(20)]

# 修改列表內的元素
# 指定index
li[0] = '女神'

# 通過切片
# 將切片的那部分列表,直接替換爲指定的列表
li[0:3] = [1, 2]
print(li)

 

列表索引,切片

list1 = [1, 2, 'a', 'china', True]

list[m:n:step] # m開始索引,n結束索引, step索引步長
list1[0] # 1
list1[:] # [1, 2, 'a', 'china', True]
list1[0:] # [1, 2, 'a', 'china', True]
list1[:-1] # [1, 2, 'a', 'china']
list1[2:4] # ['a', 'china'] 取出的元素是不包括最後一個索引值的

 

列表操作

list1 = [1, 2]
list2 = ['a', 'b']

# 連接兩個列表
list1 + list2

# 檢測元素是否在列表中
1 in list1 # True

# 列表迭代
# 在對列表進行迭代時不能進行改變列表長度的操作
for i in list1:
    print(i)
    
len(list1)  # 列表長度

max([1, 2, 4, 8, 9, 11]) # 求列表的最大值
min([1, 2, 4, 8, 9, 11]) # 求列表的最小值

# 在列表尾追加元素, 它只能有一個參數,且傳入什麼參數就插入什麼樣的參數
list1.append(1)
list1.append([1, 2, 4]) # [1, 2, 1, [1, 2, 4]]

# 傳入的參數是序列或者說是iterable的,,將序列的單個元素依次插入
list1.extend([1, 2, 4]) # [1, 2, 1, [1, 2, 4], 1, 2, 4]
 
# 指定位置插入元素
list1.insert(0, [1, 4, 9]) # [[1, 4, 9], 1, 2, 1, [1, 2, 4], 1, 2, 4]
list1.insert(0, 4)  # ['aa', [1, 4, 9], 1, 2, 1, [1, 2, 4], 1, 2, 4]

# 移除列表中第一個元素,默認是最後一個
list1.pop()  # 4

# 移除匹配項,如果沒有匹配項會報錯
list1.remove(1)

# 統計列表中某個元素的個數
list1.count(1) # 2

# 定位元素第一次在列表中出現的位置,如果該元素沒有在列表內,會報錯
list1.index(1)

# 列表排序 ,元素類型要相同
list1 = [1, 4, 11, 9, 8, 6, 5, 8]
list1.sort() # [1, 4, 5, 6, 8, 8, 9, 11]

# 列表元素反序
list1.reverse() # [11, 9, 8, 8, 6, 5, 4, 1]

# 列表拷貝, 這是淺拷貝
list1 = [['a', 'b'], 1, 2]
list2 = list1.copy()
list2[0][1] = 'cc'
list1

# 列表轉換爲字符串
join: 要注意列表元素不是字符串時的情況
str: 直接將列表轉換爲字符串

 

Python 元組

與列表類似,不同之處在於元組一經創建,就不能在對元組進行增冊操作,裏面的第一級元素也不可改變

元組使用小括號,列表使用方括號。

元組創建很簡單,只需要在括號中添加元素,並使用逗號隔開即可。

可以使用與列表相同的方式訪問元組的元素

 

tuple1 = (1, 2, 4)
tuple1 = ('a', 1)

# tuple1[0] = 'a' # 報錯

tuple1 = ([1, 2], 1, 2)

# 可以修改二級元素
tuple1[0][1] = 44

 

字典:dict

字典是可變容器模型,且可存儲任意類型對象。

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,

其中鍵值(key)必須是唯一的不可變的因爲它需要可以哈希,值(value)沒有要求

如果有重複的key,value以最後的更新的那個爲準

字典是無序存儲,可以嵌套,在查詢時使用十分查找的方式

字典定義

# 構建空字典
dict1 = {}
dict2 = dict()

# 傳入可迭代對象,構建字典
dict1 = dict(zip(['china', 'jpan', 'india'], ['中國', '日本', '印度']))

# 如果有重複的key,value以最後的那個爲準
dict2 = dict([('中國', 'china'), ('日本', 'jpan'), ('日本', 'riben')])

dict2 = dict({'cat':'貓', 'dog':'狗'})

字典操作

dict1['china'] # 中國

# 成員運算符
for key in dict1:
    print(dict1[key])
    
# 修改值
dict1['china'] = "the people's republic of china"

#刪除字典元素
del dict1['jpan']  # {'china': "the people's republic of china", 'india': '印度'}

# 更新字典
dict1.update({'mouse':'鼠標'})

# 字典按key排序, x[0] 表示key
sorted(dict1.items(), key=lambda x:x[0])

dict1 = {"age1":25, "age2": 33, "age3":21, "age4":19}
# 字典按value排序, x[1] 表示value
dict2 = sorted(dict1.items(), key=lambda x:x[1])

dict1 = {"age1":25, "age2": 33, "age3":21, "age4":19}
dict2 = {"name":"peiqi", "age": 21, "sex":"male", "address":"china"}
dict3 = {"name":"mouse", "age": 19, "sex":"female", "address":"china"}

# 內置方法操作字典
len(dict1) # 計算字典kv的個數
str(dict1) # 將字典轉換爲字符串
type(dict1) # 測試變量的類型

# 字典自己的方法
dict1.clear() # 清空字典
dict4 = dict2.copy() # 複製一個字典,這是淺複製
dict5 = dict.fromkeys([1, 2, 3, 4]) # 按給定的Seq序列爲鍵,鍵的默認值爲value創建一個字典
dict4.get("name")  # 獲取指定鍵的value, 如果沒有該鍵不會報錯
"name" in dict4    # 如果key在字典裏有,返回Ture, 否則返回False
dict4.items()     #以列表形式返回kv元組
dict4.keys()      #以列表形式返回所有的key
dict4.values()    # 以列表形式返回所有value
dict4.update({1:2})  # 將鍵值對更新到字典裏
dict4.popitem()   # 隨機返回一個kv,並在字典中刪除,一般是最後一個

 

集合(set)是一個無序的不重複元素序列。

可以使用大括號 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { }

插入集合中的值,是不可變的

s1 = {"china", "china", "jpan", "america", "german"}  # 創建集合
s2 = set()  # 創建一個空集合
s3 = {"123", "china", "45", "america", "german"}

# 支持列表推導式
s4 = {x * 4 for x in 'abracadabra' if x not in 'abc'}

# 集合的運算
# 集合差, 包含在集合s1中,不包含在集合s3中
s4 = s1 - s3

# 集合的並, 包含集合s1,s3中的所有元素
s4 = s1 | s3  

# 集合的交, 包含集合s1, s3 中都有的元素
s4 = s1 & s3

# 集合的異或, 包含不同時在s1, s3中的元素
s4 = s1 ^ s3


# 集合內置方法,操作
s4.add("hello")  # 給集合添加元素
s4.update("abc")  # 給集合添加元素,傳入的是Seq類型數據
s2.clear()  # 移除集合中所有元素
s4 = s1.copy() # 拷貝一個集合
s4 = s1.difference(s3)  # 同集合運算差集
s1.discard("chinaa")  # 刪除集合中指定的元素,不存在該元素時,不會報錯
#s4.remove("ccc")   #刪除集合中指定的元素,不存在該元素時,報錯
s4 = s1.intersection(s3) # 同集合運算交集
s4 = s1.union(s3)  # 同集合運算並集
s4.pop()  #隨機移除元素
s4.issuperset(s2) # 判斷集合是否爲傳入集合的父集
s2.issubset(s4)   # 判斷集合是否爲傳入集合的子集
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章