主要是以下幾種類型 甜刻,列表(list)辉饱,元組(tuple)钢颂,字典(dict)和集合(set)。這些結構和其他語言中的類似結構并無本質不同募谎。
1? 列表(list)
a = [1, 2, 3, 4]
b = [1]
c = [1]
d = b
e = [1, "Hello world!", c, False]? ? ? ? ? ?#多種類型混合
print(id(b), id(c))? ? ? ? ? ? ? ? # (194100040L, 194100552L)
print(id(b), id(d))? ? ? ? ? ? ? ? # (194100040L, 194100040L)
print(b == c)? ? ? ? ? ? ? ? ? ? ? # True
f = list("abcd")
print(f)? ? ? ? ? ? ? ? ? ? ? ? ? ? # ['a', 'b', 'c', 'd']
g = [0]*3 + [1]*4 + [2]*2 ? ? # [0, 0, 0, 1, 1, 1, 1, 2, 2]
因為變量其實是個引用扶关,所以對列表而言也沒什么不同,所以列表對類型沒什么限制数冬。也正因為如此节槐,和變量不同的是,即使用相同的語句賦值拐纱,列表的地址也是不同的铜异,在這個例子中體現(xiàn)在id(b)和id(c)不相等,而內容相等秸架。列表也可以用list()初始化揍庄,輸入?yún)?shù)需要是一個可以遍歷的結構,其中每一個元素會作為列表的一項东抹÷熳樱“*”操作符對于列表而言是復制,最后一個語句用這種辦法生成了分段的列表缭黔。
列表的基本操作有訪問食茎,增加,刪除馏谨,和拼接:
a.pop() # 把最后一個值4從列表中移除并作為pop的返回值
a.append(5)? ? ? ? # 末尾插入值别渔,[1, 2, 3, 5]
a.index(2)? ? ? ? ? # 找到第一個2所在的位置,也就是1
a[2]? ? ? ? ? ? ? ? # 取下標惧互,也就是位置在2的值钠糊,也就是第三個值3
a += [4, 3, 2]? ? ? # 拼接,[1, 2, 3, 5, 4, 3, 2]
a.insert(1, 0)? ? ? # 在下標為1處插入元素0壹哺,[1, 0, 2, 3, 5, 4, 3, 2]
a.remove(2)? ? ? ? # 移除第一個2抄伍,[1, 0, 3, 5, 4, 3, 2]
a.reverse()? ? ? ? # 倒序,a變?yōu)閇2, 3, 4, 5, 3, 0, 1]
a[3] = 9? ? ? ? ? ? # 指定下標處賦值管宵,[2, 3, 4, 9, 3, 0, 1]
b = a[2:5]? ? ? ? ? # 取下標2開始到5之前的子序列截珍,[4, 9, 3]
c = a[2:-2]? ? ? ? # 下標也可以倒著數(shù),方便算不過來的人箩朴,[4, 9, 3]
d = a[2:]? ? ? ? ? # 取下標2開始到結尾的子序列岗喉,[4, 9, 3, 0, 1]
e = a[:5]? ? ? ? ? # 取開始到下標5之前的子序列,[2, 3, 4, 9, 3]
f = a[:]? ? ? ? ? ? # 取從開頭到最后的整個子序列炸庞,相當于值拷貝钱床,[2, 3, 4, 9, 3, 0, 1]
a[2:-2] = [1, 2, 3] # 賦值也可以按照一段來,[2, 3, 1, 2, 3, 0, 1]
g = a[::-1] ? ? # 也是倒序埠居,通過slicing實現(xiàn)并賦值查牌,效率略低于reverse()
a.sort()
print(a)? ? ? ? ? ? # 列表內排序事期,a變?yōu)閇0, 1, 1, 2, 2, 3, 3]
2? 元組
元組和列表有很多相似的地方,最大的區(qū)別在于不可變纸颜,還有如果初始化只包含一個元素的tuple和列表不一樣兽泣,因為語法必須明確,所以必須在元素后加上逗號胁孙。另外直接用逗號分隔多個元素賦值默認是個tuple唠倦,這在函數(shù)多返回值的時候很好用:
a = (1, 2)
b = tuple(['3', 4]) # 也可以從列表初始化
c = (5,)
print(c)? ? ? ? ? ? # (5,)
d = (6)
print(d)? ? ? ? ? ? # 6
e = 3, 4, 5
print(e)? ? ? ? ? ? # (3, 4, 5)
3 集合
集合是一種很有用的數(shù)學操作,比如列表去重涮较,或是理清兩組數(shù)據(jù)之間的關系稠鼻,集合的操作符和位操作符有交集,注意不要弄混:
A = set([1, 2, 3, 4])
B = {3, 4, 5, 6}
C = set([1, 1, 2, 2, 2, 3, 3, 3, 3])
print(C)? ? ? ? # 集合的去重效果狂票,set([1, 2, 3])
print(A | B)? ? # 求并集候齿,set([1, 2, 3, 4, 5, 6])
print(A & B)? ? # 求交集,set([3, 4])
print(A - B)? ? # 求差集苫亦,屬于A但不屬于B的毛肋,set([1, 2])
print(B - A)? ? # 求差集怨咪,屬于B但不屬于A的屋剑,set([5, 6])
print(A ^ B)? ? # 求對稱差集,相當于(A-B)|(B-A)诗眨,set([1, 2, 5, 6])
4 字典
字典是一種非常常見的“鍵-值”(key-value)映射結構唉匾,鍵無重復,一個鍵不能對應多個值匠楚,不過多個鍵可以指向一個值巍膘。還是通過例子來了解,構建一個名字->年齡的字典芋簿,并執(zhí)行一些常見操作:
a = {'Tom': 8, 'Jerry': 7}
print(a['Tom'])? ? ? ? ? ? # 8
b = dict(Tom=8, Jerry=7)? ? # 一種字符串作為鍵更方便的初始化方式
print(b['Tom'])? ? ? ? ? ? # 8
if 'Jerry' in a:? ? ? ? ? ? # 判斷'Jerry'是否在keys里面
? ? print(a['Jerry'])? ? ? ? # 7
print(a.get('Spike'))? ? ? # None峡懈,通過get獲得值,即使鍵不存在也不會報異常
a['Spike'] = 10
a['Tyke'] = 3
a.update({'Tuffy': 2, 'Mammy Two Shoes': 42})
print(a.values())? # dict_values([8, 2, 3, 7, 10, 42])
print(a.pop('Mammy Two Shoes'))? ? # 移除'Mammy Two Shoes'的鍵值對与斤,并返回42
print(a.keys())? ? # dict_keys(['Tom', 'Tuffy', 'Tyke', 'Jerry', 'Spike'])