1、列表和元組操作
定義列表
names = ['Severen',"Peter",'Bob']
通過下標訪問列表中的元素,下標從0開始計數
>>> names[0]
'Severen'
>>> names[2]
'Bob'
>>> names[-1]
'Bob'
>>> names[-2] #還可以倒着取
'Peter'
切片:取多個元素
>>> names = ["Severen","Peter","Bob","John","Tom","Cat"]
>>> names[1:4] #取下標1至下標4之間的數字,包括1,不包括4
['Peter', 'Bob', 'John']
>>> names[1:-1] #取下標1至-1的值,不包括-1
['Peter', 'Bob', 'John', 'Tom']
>>> names[0:3]
['Severen', 'Peter', 'Bob']
>>> names[:3] #如果是從頭開始取,0可以忽略,跟上句效果一樣
['Severen', 'Peter', 'Bob']
>>> names[3:] #如果想取最後一個,必須不能寫-1,只能這麼寫
['John', 'Tom', 'Cat']
>>> names[3:-1] #這樣-1就不會被包含了
['John', 'Tom']
>>> names[0::2] #後面的2是代表,每隔一個元素,就取一個
['Severen', 'Bob', 'Tom']
>>> names[::2] #和上句效果一樣
['Severen', 'Bob', 'Tom']
追加
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat']
>>> names.append("IamNew")
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
插入
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.insert(2, '強行從Bob前面插入')
>>> names
['Severen', 'Peter', '強行從Bob前面插入', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.insert(4, '強行從Bob後面插入')
>>> names
['Severen', 'Peter', '強行從Bob前面插入', 'Bob', '強行從Bob後面插入', 'John', 'T
om', 'Cat', 'IamNew']
修改
>>> names
['Severen', 'Peter', '強行從Bob前面插入', 'Bob', '強行從Bob後面插入', 'John', 'T
om', 'Cat', 'IamNew']
>>> names[2] = '該換人了'
>>> names
['Severen', 'Peter', '該換人了', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat
', 'IamNew']
刪除
>>> names
['Severen', 'Peter', '該換人了', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat
', 'IamNew']
>>> del names[2]
>>> names
['Severen', 'Peter', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.remove("Peter") #刪除指定元素
>>> names
['Severen', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.pop() #刪除列表最後一個值,返回被刪除的值
'IamNew'
>>> names
['Severen', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat']
>>> names.pop(1) #刪除列表中指定索引的值,返回被刪除的值
'Bob'
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat']
擴展
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3]
獲取下標
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3]
>>> names.index('Tom')
3 #只返回找到的第一個下標
統計
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.count('Tom')
2
排序&反轉
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.sort() #排序
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str' #3.0裏不同數據類型不能放在一起排序了
>>> names[-4] = '1'
>>> names[-3] = '2'
>>> names[-2] = '3'
>>> names
['Cat', 'John', 'Severen', 'Tom', '強行從Bob後面插入', '1', '2', '3', 'Tom']
>>> names.sort()
>>> names
['1', '2', '3', 'Cat', 'John', 'Severen', 'Tom', 'Tom', '強行從Bob後面插入']
>>> names.reverse() #反轉
>>> names
['強行從Bob後面插入', 'Tom', 'Tom', 'Severen', 'John', 'Cat', '3', '2', '1']
複製
#淺copy的三種實現方式:
n1 = copy.copy(names)
n2 = names[:]
n3 = list(names)
#淺copy的應用場景:一對夫妻有一個公共的銀行賬號(第2周第9章8分鐘)
元組
元組其實跟列表差不多,也是存一組數,只不是它一旦創建,便不能再修改,所以又叫只讀列表
語法
names = ("severen","jack","tom")
它只有2個方法,一個是count,一個是index。
2、字符串操作
name = "severen"
name.capitalize() 首字母大寫
name.casefold() 大寫全部變小寫
name.center(50,"-") 輸出 '---------------------severen----------------------'
name.count('ve') 統計ve出現次數
name.encode() 將字符串編碼成bytes格式
name.endswith("en") 判斷字符串是否以en結尾
"seve\tren".expandtabs(10) 輸出'seve ren', 將\t轉換成多長的空格
name.find('A') 查找A,找到返回其索引, 找不到返回-1
format :
>>> msg = "my name is {}, and age is {}"
>>> msg.format("severen",22)
'my name is severen, and age is 22'
>>> msg = "my name is {1}, and age is {0}"
>>> msg.format("severen",22)
'my name is 22, and age is severen'
>>> msg = "my name is {name}, and age is {age}"
>>> msg.format(age=22,name="severen")
'my name is severen, and age is 22'
format_map
>>> msg.format_map({'name':'severen','age':22})
'my name is severen, and age is 22'
msg.index('a') 返回a所在字符串的索引
'9aA'.isalnum() True,包含所有的英文字母和數字
name.isalpha() True,純英文字母組成
'9'.isdigit() 是否整數
b.isidentifier() #檢測一段字符串可否被當作標誌符,即是否符合變量命名規則
str.islower() 是否爲小寫
str.isupper() 是否爲大寫
str.isspace() 是否爲空格
'My Name Is'.istitle() 是否每個字母都大寫
>>>"|".join(['seve','jack','rain'])
'seve|jack|rain'
>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'
str.lower() 大寫變小寫
str.upper() 小寫變大寫
str.strip() 去掉兩邊的空格和回車
str.lstrip()
str.rstrip()
>>>p = str.maketrans('abcdef', '123456')
>>>print('severen'.translate(p))
s5v5r5n
msg.swapcase() 大小寫互換
str.replace(old, new, count) 從左到右替換count個,無第三個參數默認全部替換
str.rfind(v) 找到最右邊的v的下標
str.split(v) 按照v分割str,返回list,默認v爲空格
>>> msg.zfill(40)
'00000my name is {name}, and age is {age}'
3、字典操作
字典一種key - value 的數據類型
語法
info = {
'stu1101': "Zhangsan",
'stu1102': "Lisi",
'stu1103': "Wangwu",
}
字典的特性:
- dict是無序的
- key必須是唯一的,so 天生去重
增
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info['stu1104'] = 'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
#update
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> b = {1:2,3:4, "stu1105":"severen"}
>>> info.update(b)
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 1: 2, 3: 4, 'stu1105': 'severen'}
刪
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.pop("stu1101") # way1,有返回值
'bob'
>>> info
{'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> del info['stu1102'] #way2,無返回值
>>> info
{'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.popitem() # way3,隨機刪除
('stu1104', 'severen')
改
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info['stu1101'] = 'bob'
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
查
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> 'stu1102' in info #標準用法
True
>>> info.get('stu1102') #獲取
'Lisi'
>>> info['stu1102'] #同上
'Lisi'
>>> info['stu1105'] #如果一個key不存在,就報錯,get不會,不存在只返回None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu1105'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.values()
dict_values(['Zhangsan', 'Lisi', 'Wangwu'])
>>> info.keys()
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>> info.items()
dict_items([('stu1101', 'Zhangsan'), ('stu1102', 'Lisi'), ('stu1103', 'Wangwu')])
others
#setdefault
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.setdefault('stu1106', 'severen') # 字典中不存在key,新增,返回value
'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}
>>> info.setdefault('stu1102', 'bob') #字典中存在key,不修改原來的value,返回字典中的value
'Lisi'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}
多級字典嵌套及操作
data = {
'浙江': {
'台州': {
'玉環': ['沙門', '楚門', '凱門'],
'溫嶺': ['嶴環', '三門']
},
'寧波': {
'鎮海': {},
'鄞州': {}
},
'杭州': {}
},
'北京': {
'朝陽': {},
'臨平': {}
},
'廣東': {}
}
>>> data['浙江']['台州']['玉環'][1] += 'haha'
>>> data['浙江']['台州']['玉環']
['沙門', '楚門haha', '凱門']
循環
#方法1
for key in info: #效率比方法2高
print(key,info[key])
#方法2
for k,v in info.items(): #會先把dict轉成list,數據裏大時莫用
print(k,v)
4、集合操作
集合是一個無序的,不重複的數據組合,它的主要作用如下:
- 去重,把一個列表變成集合,就自動去重了
- 關係測試,測試兩組數據之前的交集、差集、並集等關係
基本操作
s = set([3,5,9,10]) #創建一個數值集合
t = set("Hello") #創建一個唯一字符的集合
t.add('x') # 添加一項
s.update([10,37,42]) # 在s中添加多項
使用remove()可以刪除一項:
t.remove('H') # 不存在,會報錯
t.discard('H') # 不存在,不會報錯
t.pop() # 隨機刪除
set 的長度:
len(s)
x in s
測試 x 是否是 s 的成員
x not in s
測試 x 是否不是 s 的成員
s.issubset(t)
s <= t
測試是否 s 中的每一個元素都在 t 中
s.issuperset(t)
s >= t
測試是否 t 中的每一個元素都在 s 中
s.union(t)
s | t # t 和 s的並集
返回一個新的 set 包含 s 和 t 中的每一個元素
s.intersection(t)
s & t # t 和 s的交集
返回一個新的 set 包含 s 和 t 中的公共元素
s.difference(t)
s - t # 求差集(在s中,但不在t中)
返回一個新的 set 包含 s 中有但是 t 中沒有的元素
s.symmetric_difference(t)
s ^ t # 對稱差集(項在t或s中,但不會同時出現在二者中)
返回一個新的 set 包含 s 和 t 中不重複的元素
>>> list_1 = set([1,2,3,4,5])
>>> list_2 = set([6,7,8])
>>> list_1.isdisjoint(list_2) # 兩個列表是否有交集
True
>>> list_1 = set([1,2,3,4,5,6])
>>> list_1.isdisjoint(list_2)
False