## Python 中有四種用於存放數據的序列--list, tuple, dict, setexpress
## list 列表
- 能夠存聽任意類型數據的有序序列
- 列表能夠由零個或多個元素組成,元素之間用逗號分開,整個列表被方括號所包裹:
- 建立
- 使用[]或者list()建立列表
- new_list = ["Stanley", "Loves", "Lily"]app
- 訪問及修改
- 使用列表名[索引]來訪問和修改列表元素,索引初始值爲0,最大值不超過列表長度 - 1
- print(new_list[1]) # -> "Loves"
- new_list[1] = "Adores"
- print(new_list) # -> ['Stanley', 'Adores', 'Lily']
- 若索引能夠爲負數,則是從列表末尾以-1爲初始值開始計數函數
- 使用[start, end, step]分片生成新的列表(新列表和舊列表位於不一樣內存地址)
- [:]提取從開頭到結尾的整個字符串
- [start:]從start提取到結尾
- [:end]從開頭提取到 end - 1
- [start:end]從start提取到end - 1
- [start:end:step]從start提取到end - 1,每隔step個字符提取
- start,end,step能夠爲負數,start和end爲負數表示從右往左數,從-1開始計數,step爲負數則表示倒序排序
- 與列表有關的經常使用函數
- len(a_list):返回列表長度
- a_list.append(新元素):將新元素添加至列表末尾
- a_list.extend(another_list):將another_list添加至a_list末尾,可使用 += 達到相同效果, a_list += another_list
- a_list.insert(index, 新元素):將新元素插入列表指定位置,若index的值大於列表長度,則將新元素插入列表末尾
- del a_list[index]:刪除指定位置的元素,index的值必須小於列表長度
- del不是函數,而是Python語句,是賦值語句(=)的逆過程,它將變量和值之間的綁定解除
- a_list.remove(元素):刪除指定值的元素
a_list = ['a', 'b', 'c']
a_list.remove('b')
print(a_list) # -> ['a', 'c']
- a_list.pop(index):彈出指定位置的元素,index默認爲-1
- a_list.index(元素):若是列表中存在指定元素,則返回該元素的索引
- 使用 in 判斷某列表中是否存在某值,若存在,返回True,若不存在,返回False
- a_list.count(元素):返回元素中某元素出現的次數
- a_list.sort():列表排序,默認爲升序,經過添加參數 reverse=True 能夠改變爲降序排列
- a_list.copy():返回一個不一樣內存地址但列表值相同的新列表,淺拷貝,只能拷貝一層內容,對於嵌套列表的內存地址不作改變索引
- 列表修改問題
- 示例:
a = [1, 2, 3] # -> 建立新列表
b = a # -> 讓b和a指向同一內存地址
b[1] = "a" # -> 經過b修改列表中第二個元素
print(a) # 輸出[1, 'a', 3],因爲指向同一內存,所以對b的修改一樣會影響到a
- 能夠經過copy()函數、list()轉換函數和[:]分片生成新的不一樣內存地址的列表,如此對新列表的修改就不會影響到舊列表的內容ip
## tuple 元組
- 使用()或者tuple()建立元組
- 元組能夠看做不可更改的列表
- 相對而言,元組比列表佔用的空間少
- 元組特性和列表基本相同,但不能使用更改元素內容的相關函數,例如append()、insert()等
- 建立注意事項
- 若元組內只有一個元素,在元素後須要有一個逗號表示這是一個元組
- 也能夠不用括號建立,但須要在元素後須要有一個逗號表示這是一個元組
a = 1,
print(type(a)) # -> <class 'tuple'>內存
## dict 字典
- 一種組合數據,沒有順序,數據以鍵值對的形式出現
- 建立: d = {} 或者 d = dict()
d = {
key1: value1,
key2: value2,
...
key_n: value_n
}rem
- 特性
- 字典是序列類型,可是是無序序列,因此沒有索引和切片
- 字典中的全部數據都是鍵值對
- key必須是可哈希的數值,好比int str, float, tuple等,可是list, set, dict等不行
- value能夠是任何值
- 刪除: del dic[key] # -> 刪除整個鍵值對字符串
- 相關函數
- d.keys():返回字典的鍵
- d.values():返回字典的值
- d.items():以列表的格式返回字典數據
d = {
"Name": "Stanley",
"Age": 22
}
print(d.items()) # -> dict_items([('Name', 'Stanley'), ('Age', 22)])
- d.clear():清空
- d.get(key[, 默認值]):根據指定鍵,返回相應值,好處是能夠設置默認值,若參數key在字典中不存在,則不會報錯,而是返回傳入的默認值
- dict.fromkeys():使用指定的序列做爲鍵,使用一個值做爲字典的全部鍵的值
a_list = [1, 2, 3, 4]
d = dict.fromkeys(a_list, "LOVE")
print(d) # -> {1: 'LOVE', 2: 'LOVE', 3: 'LOVE', 4: 'LOVE'}get
# set 集合
- 集合是高中數學中的一個概念
- 一堆肯定的無序的惟一的數據
- 一樣可使用大括號定義,但大括號內必須有值
- 特徵:
- 集合內數據無序,即沒法使用索引和切片
- 集合內部數據具備惟一性,能夠用來排除重複數據
- 集合內的數據,str, int, float, tuple等可哈希的數據
- 集合自己不可哈希
- 函數:
- s.add():向集合中添加元素
- s.clear():清空集合(原集合操做)
- s.copy():淺拷貝
- s.remove(值):移除指定值,若集合中沒有該值會報錯
- s.discard(值):移除指定值,若集合中沒有該值不會報錯
- s.pop():隨機彈出集合中的一個值,沒有參數
- s1.intersection(s2):交集
- s1.difference(s2):差集
- s1.union(s2):並集
- s1.issubset(s2):檢查集合s1是不是集合s2的子集
- s1.issuperset(s2):檢查集合s1是不是集合s2的超集
- 集合的數學操做
s1 = {1, 2, 3}
s2 = {2, 3, 4, 5}
s3 = s2 - s1
print(s3) # -> {4, 5}
- frozen set 冰凍集合
- 冰凍集合就是不能夠進行任何修改的集合
- 建立:s = frozenset()
- 這是一種特殊的集合,具有除了修改外集合的全部特性
## list, dict, set 均可以使用推導式生成
- 列表推導式格式:[ expression for item in iterable if condition],if過濾條件能夠省略,該格式一樣適用於set,但中括號須要改成{}
a_list = [n for n in range(1, 10) if n % 2 == 0]
print(a_list) $ -> [2, 4, 6, 8]
- 字典推導式格式:{ key_expression : value_expression for expression in iterable }
a_list = [n for n in range(1, 5)]
b_list = ["a", "b", "c", "d"]
c_dict = {k: b_list[k - 1] for k in a_list}
print(c_dict) # -> {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
- tiple是沒有推導式的,雖然也可使用[ expression for item in iterable if condition],但實際上這已經成爲了一個生成器
a_tuple = (n for n in range(1, 10))
print(a_tuple) # -> <generator object <genexpr> at 0x7f5ee58dd360>
本文參考書籍:[美]Bill Lubanovic 《Python語言及其應用》