Python的數據類型有多種,主要有數字,字符串,列表、元組,字典,集合
1.數字類型
python數字類型:
整型,如1,2
浮點數,如1.2 1.4E4
布爾型,True,False
複數,(-5+4j)
2.bytes類型
文本總是Unicode str類型表示
二進制數據由bytes類型表示
>>> str = "我愛北京天安門">>> print(str.encode()) b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8' >>> byte = str.encode() #將字符串編碼成byte類型 >>> print(byte.decode()) #解碼二進制byte類型爲字符串 我愛北京天安門
3.字符串
字符串需要用引號引起來,可以使用單引號,雙引號,三引號。字符串是不可變的。
字符串相關操作
#返回字符‘m’的索引 >>> print(name.find("m")) 0 #格式化字符串 >>> print(name1.format(name="alex",age=23)) my name is alex,age is 23 #以字典方式進行賦值 >>> print(name1.format_map({"name": "oldboy", "age": 29})) my name is oldboy,age is 29 #判斷是否是數字和字母 >>> print("1234dd".isalnum()) True #判斷是否是字母 >>> print("adbd".isalpha()) True #判斷是否是十進制 >>> print("123445".isdecimal()) True #判斷是否是整數 >>> print("123".isdigit()) True #判斷是否是合法的標識符 >>> print("-1A".isidentifier()) False #按某個字符將其相連 >>> print("+".join(['1', '2', '3'])) 1+2+3 #去掉字符串左右兩邊的空格 >>> print("\tAlex\t".strip()) Alex #字符串替換 >>> print("alex li".replace('l','L')) aLex Li #split按某字符將其拆開以列表顯示 >>> print("1+2+3+4".split("+")) ['1', '2', '3', '4'] #按”\n”將字符串進行拆分,以列表方式顯示 >>> print("1+2\n+3+4".splitlines()) ['1+2', '+3+4'] #以標題方式顯示 >>> print("alex li".title()) Alex Li
4.列表
列表是python常用數據類型之一,以“[]”表示,列表的常見操作切片,列表解析
#定義列表 >>> names = ["Alex","Hudaohong","Oldboy","tom"] #切片操作 #獲取列表的第1元素 >>> names[1:2] ['Hudaohong'] #獲取列表第0,1元素 >>> names[:2] ['Alex', 'Hudaohong'] #-1指最右邊一個元素 >>> names[-4:-1:2] ['Alex', 'Oldboy'] >>> names[:-1:2] ['Alex', 'Oldboy'] #向列表中追加元素 >>> names.append("Lucy") >>> names ['Alex', 'Hudaohong', 'Oldboy', 'tom', 'Lucy'] #向列表中插入元素 >>> names.insert(3,"Tom") >>> names ['Alex', 'Hudaohong', 'Oldboy', 'Tom', 'tom', 'Lucy'] #刪除元素,默認是刪除最後一個元素,如果刪除的元素不存在,會報異常 >>> names.pop() 'Lucy' >>> names.pop("Lucy") Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> names.pop("Lucy") TypeError: 'str' object cannot be interpreted as an integer #返回列表元素的索引 >>> names[names.index("Tom")] 'Tom' #統計元素個數 >>> names.count("Tom") 1 #將列表反轉 >>> names ['tom', 'Tom', 'Oldboy', 'Hudaohong', 'Alex'] >>> names.reverse() >>> names ['Alex', 'Hudaohong', 'Oldboy', 'Tom', 'tom'] #排序 >>> names.sort() >>> names ['Alex', 'Hudaohong', 'Oldboy', 'Tom', 'tom']
列表的複製有淺複製與深複製之別
>>> import copy >>> names = ["Alex","Hudaohong","Oldboy","Tom",["Jim","Lucy"]] #淺複製 >>> names1 = names.copy() #深複製 >>> names2=copy.deepcopy(names) #修改列表第2個元素 >>> names[1] = "胡道宏"#修改嵌套列表的第1個元素 >>> names[4][0]="JIM">>>#顯示打印結果 >>> print("{name} is names".format(name=names)) ['Alex', '胡道宏', 'Oldboy', 'Tom', ['JIM', 'Lucy']] is names >>> print("{name} is names1".format(name=names1)) ['Alex', 'Hudaohong', 'Oldboy', 'Tom', ['JIM', 'Lucy']] is names1 >>> print("{name} is names2".format(name=names2)) ['Alex', 'Hudaohong', 'Oldboy', 'Tom', ['Jim', 'Lucy']] is names2
列表解析
列表解析是根據已有列表高效快速生成新列表的方式,它是迭代機制的一種應用
語法結構 [expression for iter_var in iterable] [expression for iter_var in iterable if cond_expr] >>> l1=[1,2,3,4] #列表解析生成新的列表 >>> l2 = [I ** 2 for I in l1] >>> l2 [1, 4, 9, 16] >>> l3 = [I ** 2 for I in l1 if I> 2] >>> l3 [9, 16]
5.字典
Python中的字典是無序的,是以鍵值對的形式存在,定義字典是需要用”{}”,如{”name”:”Tom”,”age”:23}
#定義字典 >>> info = {"stu01":"Tom","stu02":"Lucy","stu03":"Jim"}#通過鍵值獲取字典值 >>> info["stu01"]'Tom' #增加 >>> info["stu04"] = "Baby" #刪除 >>> del info["stu04"] >>> info.pop("stu03") 'Jim' #如果某個值不在字典中,不會報異常 >>> info.get("stu04") >>> info.get("stu01") 'Tom' #判斷個值是否在字典中 >>> print("stu01" in info) True #update合併字典,如果有同名字典會覆蓋 >>> dictb={"stu100":"zhangsan","stu02":"LiSi","stu101":"WangWu"} >>> info.update(dictb) >>> info {'stu01': 'Tom', 'stu02': 'LiSi', 'stu100': 'zhangsan', 'stu101': 'WangWu'} #以元組方式顯示字典的鍵值 >>> info_c = info.items() >>> print(info_c) dict_items([('stu01', 'Tom'), ('stu02', 'LiSi'), ('stu100', 'zhangsan'), ('stu101', 'WangWu')]) #初始化一個新字典 >>> dictC=dict.fromkeys([6,7,8],[1,{"name":"Boy"},444]) >>> dictC {6: [1, {'name': 'Boy'}, 444], 7: [1, {'name': 'Boy'}, 444], 8: [1, {'name': 'Boy'}, 444]} # 將會3個字典中的name都改了,類似於淺複製 >>> dictC[7][1]["name"] = "girls" >>> dictC {6: [1, {'name': 'girls'}, 444], 7: [1, {'name': 'girls'}, 444], 8: [1, {'name': 'girls'}, 444]} #循環字典,推薦使用基本方式 >>> for key in dictC:print(key,dictC[key])6 [1, {'name': 'girls'}, 444]7 [1, {'name': 'girls'}, 444]8 [1, {'name': 'girls'}, 444] #數據量大時不適合 >>> for k,v in info.items():print(k,v) stu01 Tom stu02 LiSi stu100 zhangsan stu101 WangWu
6.集合
集合set 可以去重 無序 關係測試: 交集,並集,差集等
集合操作
#集合可以去重 >>> list01 = [1, 4, 5, 7, 3, 5, 1, 9] >>> list01= set(list01) >>> list01 {1, 3, 4, 5, 7, 9} >>> list02=set([2,4,6,8,3]) #交集 >>> print(list01.intersection(list02)) {3, 4} >>> print(list01&list02) {3, 4} #並集 >>> print(list01.union(list02)) {1, 2, 3, 4, 5, 6, 7, 8, 9} >>> print(list01 | list02) {1, 2, 3, 4, 5, 6, 7, 8, 9} #差集,list01中有,list02中沒有 >>> print(list01.difference(list02)) {1, 5, 9, 7} >>> print(list01 - list02) {1, 5, 9, 7} #子集:判斷list03是否list01的子集 >>> list03 = set([1,3,7]) >>> print(list03.issubset(list01)) True #判斷list01是否list3的子集 >>> print(list01.issubset(list03)) False # 對稱差集,兩個集合中互爲沒有的> >> print(list01.symmetric_difference(list03)) {4, 5, 9} >>> print(list01 ^ list03) {4, 5, 9} #判斷兩個集合,如果沒有合集則返回True >>> list04=([5,6,8]) >>> print(list03.isdisjoint(list04)) True #添加 >>> list01.add(99) >>> list01.update([88,77,55]) >>> print(list01) {1, 3, 4, 5, 99, 7, 9, 77, 55, 88} #刪除集合元素 >>> list01.pop() 1 #remove刪除時不返回元素 >>> list01.remove(77) >>> list01 {3, 4, 5, 99, 7, 9, 55, 88}