編碼轉換python
# s1 = '中國'
# b1 = s1.encode('utf-8')
# # print(b1)-------------->b'\xe4\xb8\xad\xe5\x9b\xbd'
utf-8 bytes --->gbk bytes
# s2 = b1.decode('utf-8')
# # print(s2)---------------中國
# b2 = s2.encode('gbk')
# print(b2)------------------b'\xd6\xd0\xb9\xfa'app
數據類型的補充
元組編碼
tu1 = ('laonanhai')
tu2 = ('laonanhai',)
print(tu1,type(tu1))-----------laonanhai <class 'str'>
print(tu2,type(tu2))-----------('laonanhai',) <class 'tuple'>spa
tu1 = (1)
tu2 = (1,)
print(tu1,type(tu1))-------------1 <class 'int'>
print(tu2,type(tu2))(1,) -----------<class 'tuple'>code
元組裏面若是隻有一個元素且沒有逗號,則該數據的數據類型與裏面的元素相同
tu1 = ([1, 2, 3])
tu2 = ([1, 2, 3])
print(tu1, type(tu1))----------[1, 2, 3] <class 'list'>
print(tu2, type(tu2))----------[1, 2, 3] <class 'list'>對象
l1 = [111, 222, 333, 444, 555,]索引
索引爲奇數對應的全部元素所有刪除。
del l1[1::2]
print(l1)--------------[111, 333, 555] utf-8
***在循環一個列表時,最好不要改變列表的大小,會影響你的最終結果
倒着刪除:rem
for index in range(len(l1)-1,-1,-1):hash
if index % 2 == 1:
del l1[index]
print(l1)--------------------[111, 333, 555]
dict
dic = dict.fromkeys('abc',666)
print(dic)-----------------{'a': 666, 'b': 666, 'c': 666}
dic = dict.fromkeys([11, 22, 33],666)
print(dic)--------------------{11: 666, 22: 666, 33: 666}
dic = dict.fromkeys([1, 2, 3], [])
dic[3].append(666)
print(dic)----------------------{1: [666], 2: [666], 3: [666]}
***在循環dict中,最好不要改變dict的大小,會影響結果或者報錯。
dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3','name': 'alex'}for i in dic:
if 'k' in i:
del dic[i]
l1 = []
for key in dic:
if 'k' in key:
l1.append(key)
print(l1)
for key in l1:
del dic[key]
print(dic)---------------------報錯(緣由是字典在迭代過程當中改變大小)
數據類型的轉換:
str----------->list split
list--------->str join
tuple-------->list
tu1 = (1, 2, 3)
l1 = list(tu1)
print(l1)------------------[1, 2, 3]
tu2 = tuple(l1)
print(tu2)----------------(1, 2, 3)
dic----------->list list(dic)(列表中的元素只有key)
dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3',}
l1 = list(dic)
print(l1)------------------------['k1', 'k2', 'k3']
print(list(dic.keys()))------------['k1', 'k2', 'k3']
print(list(dic.values()))------------['v1', 'v2', 'v3']
print(list(dic.items()))---------------[('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]
0, '', [], () {} ---> bool 都是Fasle
print(bool([0, 0, 0]))------------True
集合
集合自己是可變的數據類型,不可hash,有增刪改查操做
set集合是python中的一個基本數據類型
set中的元素是不重複的,無序的,裏面的元素必須是可hash的(int,str,tuple,bool)
set就是dict類型的數據可是不保存value
set集合的增刪改查
1增長
.add()
s = {"劉嘉玲", '關之琳', "王祖賢"}
s.add("鄭裕玲")
print(s)
s.add("鄭裕玲") # 重複的內容不會被添加到set集合中
print(s)
s = {"劉嘉玲", '關之琳', "王祖賢"}
s.update("麻花藤") # 迭代更新
print(s)
2.刪除
s = {"劉嘉玲", '關之琳', "王祖賢","張曼玉", "李若彤"}
item = s.pop() # 隨機彈出⼀一個.
s.remove("關之琳") # 直接刪除元素
# s.remove("⻢馬⻁虎疼") # 不存在這個元素. 刪除會報錯
s.clear() # 清空set集合.須要注意的是set集合若是是空的. 打印出來是set() 由於要和 dict區分的.
3.修改
set集合中的數據沒有索引. 也沒有辦法去定位一個元素. 因此沒有辦法進行直接修改.
# 咱們能夠採用先刪除後添加的方式來完成修改操做
s.remove("劉嘉玲")
s.add("趙本山")
4.查詢
# set是⼀一個可迭代對象. 因此能夠進行for循環
for el in s:
print(el)
set集合自己是能夠發生改變的. 是不可hash的. 咱們能夠使用frozenset來保存數據.
frozenset是不可變的. 也就是⼀個可哈希的數據類型
深淺拷貝
淺拷貝. 只會拷貝第⼀層. 第二層的內容不會拷貝. 因此被稱爲淺拷貝
lst1 = ["何炅", "杜海海濤","周渝⺠民", ["麻花藤", "⻢馬芸", "周筆暢"]]
lst2 = lst1.copy()
深度拷貝. 把元素內部的元素徹底進行拷貝複製. 不會產生⼀個改變另⼀個跟着 改變的問題
import copy
lst1 = ["何炅", "杜海海濤","周渝⺠民", ["麻花藤", "⻢馬芸", "周筆暢"]]
lst2 = copy.deepcopy(lst1)