2.列表_元組_字典_集合

jason8826發表於2024-05-10
# 切片操作會生成一個新的序列(而不是提取原先序列的元素)

# 建立空列表
list1 = [] # 或 list1 = list()
print(list1)
# 列表新增元素
# l.append(x) 相當於l[len(l):] = [x]
list1.append("12345")
print("append", list1)
# l.extend(x) 相當於l[len(l):] = x,x不能是數字
list1.extend("54321")
print("extend", list1) # 注:extend()不會把物件視為一個整體,而是把它包含的元素逐個新增到列表中
# l.insert(i, x) 相當於l[i:i] = [x],和append()一樣會把物件視為一個整體
list1.insert(1, "123")
print("insert", list1)
# 列表刪除元素
# del l[i:j:k]
del list1[1]
print("del", list1)
# l.pop([i]) 相當於 del l[i:i],不給索引預設刪除最後一個,類似出棧
list1.pop(1)
print("pop", list1)
# l.remove(x) 刪除列表中第一個值為x的元素
list1.remove('4')
print("remove", list1)
# l.clear() 相當於 del l[:],區別del l是刪除變數,del l[:]是刪除列表的資料使之變成空列表
list1.clear()
print("clear", list1)
# 列表修改元素 相當於重新賦值
list1[0:5] = ['1', '2', '3', '4', '5']
print(list1)
# 列表查詢元素
# l.count(x) 統計元素x出現的次數
print(list1.count('1'))
# l.index(x[,start[,end]]) 返回第一個值為x元素的索引,所以index前最好先count一下
print(list1.index('1'))

# 列表實現棧和佇列
list3 = list()
list3.insert(0, 'a')
list3.insert(0, 'b')
list3.insert(0, 'c')
print("佇列 先進先出", list3.pop())
print("佇列 先進先出", list3.pop())
print("佇列 先進先出", list3.pop())
list4 = []
list4.append('a')
list4.append('b')
list4.append('c')
print("棧 後進先出", list4.pop())
print("棧 後進先出", list4.pop())
print("棧 後進先出", list4.pop())

from collections import deque
# 更好的棧和佇列實現方式(效率更高)
# collecions模組中deque結構體,它被設計成兩端存入和讀取都很快的特殊list
List = deque()
List.append('a')
List.append('b')
List.append('c')
print("佇列 先進先出", List.popleft())
print("棧 後進先出", List.pop())
print(list(List))

# 建立元組(一旦建立元素不能修改,只能重新賦值或者刪除)
tuple1 = () # 或tuple1 = tuple()
tuple2 = ('a', 'b')
tuple3 = ('a',) # 建立單個元素的元組,必須要加上一個逗號,不加的話會視為一個字串
tuple4 = ('abc')
print(tuple1, tuple2, tuple3, tuple4)

# 建立字典
dict1 = {} # 或 dict1 = dict()
print(dict1)
# fromkeys()方法建立dict.fromkeys(list, value=None)
list1 = list("12345")
dict1 = dict.fromkeys(list1, 60)
print(dict1)
# 訪問字典
print(dict1['1']) # 透過鍵名訪問字典dicname[keyname]
print(dict1.get('7','該鍵不存在')) # dictname.get(key[,defaut]) 鍵不存在時,返回default的值,如果不指定返回None
# 刪除字典
# del dict1 # 不真正刪除,後面還會用到
# 對映函式建立
'''
方式一:
demo = dict(str1=value1, str2=value2, str3=value3) 注:字串不能帶引號
方式二:
demo = (['one', 1], ['two', 2], ['three', 3]) 注:組合是列表或元組都行
a = dict(demo)
方式三:
keys = ['one', 'two', 'three'] 注:鍵只能是字串、元組和數字,不能是列表,列表是可以變的。
values = (1, 2, 3)
demo = dict(zip(keys, values))
'''
# 字典操作-增,直接給不存在的key賦值
dict1['new'] = 30
print(dict1)
# 字典操作-刪
del dict1['1']
print(dict1)
# 字典操作-改
dict1['new'] = 20
print(dict1)
# 字典操作-查,基於key來判斷
print('2' in dict1)
print('old' in dict1)
# keys()用於返回字典中所有的鍵
print(dict1.keys())
# values()用於返回字典中所有的值
print(dict1.values())
# items()用於返回字典中所有的鍵值對
print(dict1.items())
# copy()
dict1 = {'one':1, 'two':2, 'three':[1,2,3]}
dict2 = dict1.copy() # 重新申請一塊記憶體存放資料
dict1['one'] = 2 # dict1的值改變,不會影響dict2
dict1['three'].pop() # dict1的值為列表的地址,改變該地址對應的資料會影響dict2
print(dict2)
# update(),key存在則更新value,不存在則新增新的鍵值對
dict1.update({'one':3, 'four':4})
print(dict1)
# pop(key)和popitem()
dict1.pop('four') # 刪除指定鍵值對
print(dict1)
dict1.popitem() # 後進先出的順序刪除鍵值對
print(dict1)
# setdefault(key[,default])如果key存在,則返回value,不存在則插入值為default的鍵值對,並返回default。default預設為None
dict1.setdefault('three')
print(dict1)
# 使用字典格式化字串
dict2 = {'小明':60, '小李':80, '小王':99}
print(dict2)
print('小明的成績:%(小明)s 小李的成績:%(小李)s' % dict2) # %後面,把鍵透過圓括號括起來,再%後面跟字典名


# 建立集合(唯一性,無序性)
set1 = {1, 'c', 1, (1,2,3), 'c'}
set2 = set("abcddaf") # 建立空集合需要使用set(),使用{}會認為是空字典
print(set1, set2)
# 訪問集合(集合是無序的,無法使用下標訪問,最常用的方法就是迴圈結構訪問)
for a in set1:
    print(a, end=' ')
print()
# 刪除集合
# del(set1)
#集合操作-增,只能新增不可變資料,不支援新增列表、字典這類可變資料
set1.add(2)
print(set1)
#集合操作-刪
set1.remove(2) # 也可以使用discard(),用法與remove()完全相同,唯一區別是刪除失敗時,不丟擲異常
print(set1)
# 交集,並集,差集
print("交集:", set1 & set2)
print("並集:", set1 | set2)
print("差集:", set1 - set2) # 取一個集合中,另一個集合沒有的元素
print("對稱差集:", set1 ^ set2) # 取集合A和B中不屬於A&B的元素
# frozenset集合(set集合的不可變版本)
# set 集合中所有能改變集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支援;set 集合中不改變集合本身的方法,fronzenset都支援。

相關文章