一、數據類型 數據類型,相同類的值(指定類的對象)具有相同的功能,功能保存在類中(只有一份) 1、整數(int類) 1,2,3,4.......99.... bit_length() 當前十進位用二進位表示時,最少使用的位數 v = 15# 當前十進位用二進位表示時,最少使用的位數data = v. ...
一、數據類型
數據類型,相同類的值(指定類的對象)具有相同的功能,功能保存在類中(只有一份)
1、整數(int類)
1,2,3,4.......99....
bit_length()
當前十進位用二進位表示時,最少使用的位數
v = 15
# 當前十進位用二進位表示時,最少使用的位數
data = v.bit_length()
print(v)
print(data)
2、布爾型(bool類)
True 1
False 0
布爾值為False的情況:False : 0,None,'',{},[],()
3、字元串(str類)
字元串調用函數時,字元串本身原值不變
3.1 字元串提供的功能
3.1.1 upper()
變大寫
3.1.2 lower()
變小寫
3.1.3 capitalize()
首字母變大寫,其他變小寫
3.1.4 strip()
去除首尾空格、換行、製表符、制定的內容
示例:
3.1.5 lstrip()
去除左邊空格
3.1.6 rstrip()
去除右邊空格
3.1.7 replace()
替換
3.1.8 split()
分割
3.1.9 isdecimal()
判斷當前字元串中是否全部都是數字
示例:
count = 0
v = "abc123fsdfa3f"
for item in v:
if item.isdecimal():
count += 1
print(count)
3.1.10 join()
連接列表的元素
3.1.11 endswith()、startswith()
print(name.endswith('SB'))#判斷是否以'SB'結尾
print(name.startswith('alex'))#判斷是否以'alex'開頭
3.1.12 encode('utf-8或gbk')
把字元串轉化成位元組
3.1.13 find()、index()
find()
在字元串中查找,找不到返回-1
index()
在字元串中查找,找不到報錯
3.1.14 format()
格式化字元串
(1)
(2)
(3)
(4)
3.1.15 casefole()
字元串變小寫,包含小語種,lower()只能改變英文
3.1.16 center(),ljust(),rjust()
center():兩邊補字元
ljust():右邊補字元
rjust():左邊補字元
3.1.17 count()
計算個數
3.1.18 expandtabs()
可以聯合換行符製表符使用,固定字元間隔長度
# \n ,換行符
# \t,製表符,相當於Tab縮進
3.1.19 index()
列表字元的索引
3.1.20 isdigit()
判斷字元串的內容是否是純數字
3.1.21 isalpha()
判斷字元串的內容是否是純字母
3.1.22 isspace()
3.2 公共功能
3.2.1 len()
計算當前字元串長度
3.2.2 索引、下標
# - 單個值:v[0]
# - 多個值:v[起始位置:結束位置]
# - 多個值:v[起始位置:結束位置:步長]
# PS: -1表示最後
示例:
# 題: 列出v = "ASCII第一次以規範標準的型態發"
# v = "ASCII第一次以規範標準的型態發"
# length = len(v)
# index = 0
# while True:
# data = v[index]
# print(data)
# index += 1
# if index == length:
# break
v = "ASCII第一次以規範標準的型態發"
length = len(v)
index = 0
while index < length:
data = v[index]
print(data)
index += 1
3.2.3 迴圈
4、int-bool-str轉換
int 89 90
bool True False
str 'sdf' '7'
4.1 str-->int
示例:
#加法計算器
v1 = input("請輸入第一個值:") # "54"
v2 = input("請輸入第二個值:")
v3 = int(v1) + int(v2)
print(v3)
4.2 str-->bool
空值字元串--False
其他--True
4.3 int-->str
str(int)
4.4 int-->bool
0--False
其他--True
4.5 bool-->str
str(bool)
4.6 bool-->int
True--1
False--0
4.7 示例
# 面試題
a = False or 2 > 3
print(a)
#有具體數字或者字元串時,輸出數字或字元串
a = 9 or 2 > 3
print(a)
a = "asdf" or 2 > 3
print(a)
5、列表(list類)
可變的容器,本身是變化的
5.1 list類中提供的功能
5.1.1 append()
在列表尾部追加一個值[修改本身值]
示例:
v = []
while True:
name = input("請輸入用戶名:")
if name.lower() == 'q':
break
v.append(name)
print(v)
5.1.2 insert()
在指定位置插入數據
v = [11,22,33,44,"蔣毅"]
v.insert(4,"孫騎兵")#4是下標
print(v)
5.1.3 reverse()
v = [11,22,33,44]
print(v)
v.reverse()
print(v)
5.1.4 remove()、del、pop()
刪除
pop()不指定位置預設刪除最後一個,返回刪除元素的值
5.1.5 index()
找參數的位置
5.1.6 clear()
清空列表
5.1.7 sort()
排序
按ASCII碼排序
5.1.8 extend()
合併
5.1.9 copy()
複製、淺拷貝
有一個特性:淺copy,只copy第一層
現在的需求是要輸出的names2與第一行names定義的相同
name1 = ["zhangyang","guyun","xiangpeng","xulang"]
name2 = name1.copy()
name1[1] = "古雲"
print(name1)
print(name2)
name1 = ["zhangyang","guyun","xiangpeng",["jack","alex"],"xulang"]
name2 = name1.copy()
name1[1] = "古雲"
name1[3][0] = "傑克"
print(name1)
print(name2)
列表的特性
與字元串或數字不同
深拷貝
import copy
name1 = ["zhangyang","guyun","xiangpeng",["jack","alex"],"xulang"]
name2 = copy.deepcopy(name1)
name1[1] = "古雲"
name1[3][0] = "傑克"
print(name1)
print(name2)
簡述深淺拷貝
#如果拷貝單層列表時,深淺拷貝都把原列表拷貝到了一個新的記憶體地址,所以原列表被修改新列表都不會被修改
#如果拷貝多層列表時
#淺拷貝只將原列表的第一層拷貝到了新的記憶體地址,新列表二層及以內的依然指向原列表的記憶體地址,所以原列表被修改,新列表的
#第一層不會改變,二層及以內的會跟著新列表修改
#深拷貝是將原列表的所有都拷貝到了新的記憶體地址,原列表被修改,新列表不會改變
5.2 公共功能
5.2.1 len()
計算列表長度
5.2.2 索引
5.2.3 迴圈
for
5.2.4 替換
5.2.5 刪除
del
5.2.6 嵌套
列表中的元素可以是:數字,字元串,布爾值,列表
li = [11,22,[6,"88991",7],33,True,"蔣毅",55]
val = li[2][1][-1]
print(val)
li[3] = 66
print(li)
li[2][2] = 77
print(li)
li[2][1] = 666
print(li)
li[5] = li[5].replace('蔣','江')
li[5] = "江毅"
print(li)
5.3 刪除補充
刪除列表元素時,會影響列表長度,從而使得索引取值時,容易出現錯誤。
解決方法:
# 解決方案一:
li = [11, 22, 33, 44, 66] # 0
new_list = []
# 索引為奇數值,刪除
for i in range(0,len(li)):
if i%2 == 0:
new_list.append(li[i])
li = new_list
print(li)
# 解決方案二:
li = [11, 22, 33, 44, 66] # 0
# 索引為奇數值,刪除
#倒序刪除rang(4,-1,-1)
for i in range(len(li)-1,-1,-1): # 4,0
if i%2 == 1:
del li[i]
print(li)
# 解決方案三:
#切片+步長
li = [11, 22, 33, 44, 66]
#del li[0:4]
del li[0:4:2]
print(li)
6、元組(tuple類)
不可變的容器
只有一個元素時,一定加逗號(1,)
6.1 公共功能
6.1.1 len()
6.1.2 索引
6.1.3 迴圈
for
6.1.4 嵌套
v = (11,22,[11,22,33],33,(9,1,2,"alex"),44)#兒子不可變,孫子可能可變
v[2][1] = "xxxxx"
print(v)
v[2].append("asdasd")
print(v)
7、字典(dict類)
7.1 dict類中提供的功能
7.1.1 get()
根據key獲取對應的值,key不存在預設取None
7.1.2 keys()
7.1.3 values()
7.1.4 items()
7.1.5 update()
合併兩個字典,如果有重覆鍵則合併值,沒有重覆的鍵則添加值
7.2 公共功能
7.2.1 len()
7.2.2 獲取
7.2.3 設置
# key存在,則更新值
# key不存在,則創建鍵值對
v = {
"k1":'v1', # 鍵值對
"k2":'v2', # 鍵值對
}
v['kk1'] = 666
v['k1'] = 777
print(v)
7.2.4 刪除
del
7.2.5 迴圈
for
7.2.6 嵌套
val = {
'k1': 123,
'k2': "asdf",
'k3': True,
'k4': [11,22,33],
'k5': (1,2,3),
'k6': {
'kk1':'vv1',
'kk2':'vv2',
},
'k7': [1,2,(8,6,2),{"k111":'vvv1'},5]
}
7.3 示例
# 示例:
user_list = [
{'name':'老頭','age': 18},
{'name':'流量','age': 66},
{'name':'wifi','age': 99},
]
n = input("請輸入姓名:")
a = input("請輸入年齡:")
temp = {'name': n, 'age': int(a)}
user_list.append(temp)
for item in user_list:
print(item['name'],item['age'])
7.4 刪除補充
不要在迴圈當前字典的過程中,修改當前字典大小
# 題1:dic = {'k1':"v1",'k2':'v2'}把key="k1",鍵值對刪除
# 題2:dic = {'u1':"v1",'k2':'v2','k3':'v3'}把key中存在k,鍵值對刪除
錯誤:
正確:
# 正確方式
dic_key_list = []
for key in dic:
dic_key_list.append(key)
for row in dic_key_list:
if 'k' in row:
del dic[row]
print(dic)
8、位元組(bytes類)
bytes
一般網路傳輸和硬碟存儲使用bytes類型
8.1表現形式
name = b'alex'
name = b'\x12\x86\xdf\xdf\xa8\x34....' #不在ascii表中的字元,中文字元
8.2內部原理
在硬碟內部存儲以0101010形式存儲,但是輸出查看時以bytes形式顯示
utf-8或gbk...
utf-8
一個字元三個位元組,內部用二進位表示
01100001 a
01101100 l
01100101 e
01111000 x
00000010 00000000 00000000 00000110 00000000 00000000 海嬌
gbk
一個字元兩個位元組
00000000 01100001 a
00000000 01101100 l
00000000 01100101 e
00000000 01111000 x
10000010 00000000 海
10000010 00100000 嬌
xxx
00000000 00000000 01100001 a
00000000 00000000 01101100 l
00000000 00000000 01100101 e
00000000 00000000 01111000 x
9、浮點數(float類)
#小數
#有限小數
#無限迴圈小數 3.33333 、4.404404
#無限不迴圈小數 派
#浮點數
#有限小數
#無限迴圈小數 3.33333 、4.404404
10、複數(complex類)
#複數 = #實數 #虛數
#複數 = 實部 + 虛部
#a+bj
11、集合(set類)
11.1 性質
集合的元素無重覆,可以做快速去重的方法
集合是可變數據類型
集合內部不能加可變數據類型,如列表,列表
集合內部元素時不可變數據類型
集合內部不能嵌套集合
11.2 功能
11.2.1 add()
添加
11.2.2 difference()、difference_update()
差集
difference()
不修改原集合,改變之後的集合賦給一個新的變數
difference_update()
直接修改原集合
11.2.3 symmetric_difference()、symmetric_difference_update()
排除兩個集合同時存在的值
symmetric_difference()
不修改原集合,改變之後的集合賦給一個新的變數
symmetric_difference_update()
直接修改原集合
11.2.4 dicard()
在集合中刪除制定值
11.2.5 intersection()、intersection_update()
求交集
intersection()
不修改原集合,改變之後的集合賦給一個新的變數
intersection_update()
直接修改原集合
11.2.6 union()
求並集
11.2.7 isdisjoint()
判斷是否無交集
11.2.8 issubset()、issuperset()
issubset() 是否是子集
issuperset()是否是父集
11.2.9 pop()、remove()、discard()
刪除集合的元素
pop()
刪除元素並返回該元素
remove()
刪除,如果元素不存在會報錯
discard()
刪除,如果元素不存在不會報錯
11.2.10 update()
更新
11.2.11 for迴圈
11.2.12 len()
長度
11.3 各類型轉換