-
引入: 計算機是可以做數學計算的機器,因此,計算機程式理所當然地可以處理各種數值,但是,計算機能處理的遠不止數值,還可以處理文本、圖形、音頻、視頻、網頁等各種各樣的資料,不同的資料,需要定義不同的資料型別,在Python中,能夠直接處理的資料型別有:數字、字串、串列、元組、字典等,
-
關于序列: 在python當中 序列就是一組按照順序排列的值【資料集合】
在python中 存在三種內置的序列型別:字串、串列、元組
優點:可以支持索引和切片的操作
特征:第一個正索引為0,指向的是左端,第一個索引為負數的時候,指向的是右端
切片:【高級特性】可以根據下表來獲取序列物件的任意[部分]資料
語法結構:[start : end : step] step默認1
Python-高級資料型別
- 1、字串操作
- 1.1、 字串常用方法
- 1.2、字串常用函式
- 1.3、關于切片
- 1.4、與其他型別綜合操作
- 2、串列及常用方法
- 2.1、關于串列
- 2.2、串列常用函式、方法
- 1)串列元素的查找
- 2)串列元素的增加
- 3)串列元素的洗掉
- 4)串列元素的修改
- 3、元組
- 3.1、關于元組
- 3.2、元組的訪問
- 3.3、元組的修改
- 3.4、元組的洗掉
- 4、字典
- 4.1、字典的訪問
- 4.1、字典的修改更新
- 4.1、字典的洗掉
- 5、mysql知識擴展
1、字串操作
1.1、 字串常用方法
str='python'
print(str) #輸出字串str
print(type(str)) #type 查看資料型別
print(str[0]) #輸出字串str的第一個元素,即下標為0的元素
#遍歷輸出字串
str1='I love Python'
for ietm in str1:
print(ietm,end='') #通過end=''控制輸出不換行
pass
1.2、字串常用函式
- 1.capitalize() 首字母變大寫
- 2.endswith/startswith()是否 x結束/開始
- 3.find()檢測x是否在字串中
- 4.lower/upper 大小寫轉換
- 5.strip() 去除字串中兩邊的空格 lstrip()/rstrip() 去除左邊/右邊空格
#字串常用函式
name='joson'
print(name.capitalize()) #首字母大寫
str=' I love Python '
print(str.startswith('i')) #是否以i開頭,回傳布林值
print(str.find('o')) #查找第一次‘o' 出現的位置,從下標0 開始
print(str.find('M')) #查找第一次‘o' 出現的位置,從下標0 開始 ,若未找到回傳-1
print(str.lower()) # 將字串轉化為小寫
print(str.upper()) # 將字串轉化為小寫
print(str.strip()) #去掉兩邊空格
print(str.lstrip()) #去掉左邊空格
# 復制字串
a='tom'
print('a的記憶體地址%d'%id(a)) #id函式 可以查看一個物件的記憶體地址
b=a #在此只是把a物件的記憶體地址賦給了b
print('b的記憶體地址%d'%id(b))
- 結果如下:

1.3、關于切片
- 切片是指截取字串中的其中一段內容, 切片使用語法:[起始下標:結束下標:步長] 切片截取的內容不包含結束下標對應的資料,步長指的是隔幾個下標獲取一個字符,(下標會越界,切片不會)
#關于切片,實際上就是根據要求截取對應字串 [start:end:step]
str='I love Python'
print(str[0:5]) #截取第1個到第6個字符,即從下標0開始到下標5,包括第一個,不包括第6個
print(str[0:5:2]) # 以步長為2從下標0開始截取到下標5結束,即截取第1,3,5個字符
#若起始值,結束值默認第一或者最后,可以省略
print(str[:])
print(str[0:5]) # str[0:5]=str[:5]
#倒敘輸出
print(str[::-1])
- 結果如下:

1.4、與其他型別綜合操作
# 共有方法 + * in
str1='今天心情真好'
str2='我想學習Python'
print(str1+str2) #通過’+‘ 將兩個字串合并
print(3*str1) #通過數字’*‘字串,即將該字串重復輸出
print('我' in str1) #通過'in' 來查詢對應的元素是否在該字串中 回傳布林值
- 結果如下:

2、串列及常用方法
2.1、關于串列
串列list:python當中非常重要的資料結構,是一種有序的資料集合
特點:
1:支持增刪改查
2:串列中的資料是可以變化的【資料項可以變化,記憶體地址不會改變】
3:用[] 來表示串列型別,資料項之間用逗號來分割,注意:資料項可以是任何型別的資料
4:支持索引和切片來進行操作
# 串列
li1=[] #空串列
print(li1)
print(type(li1)) #查看型別
li2=[1,2,3,'你好']
print(li2)
print(len(li2)) #len函式可以獲取到串列物件中的資料個數
str='我喜歡python'
print(len(str))
2.2、串列常用函式、方法
- 函式 是封裝了一些獨立的功能,可以直接呼叫,能將一些資料(引數)傳遞進去進行處理,然后回傳一些資料(回傳值),也可以沒有回傳值,可以直接在模塊中進行定義使用
- 常用函式:
cmp(list1, list2) 比較兩個串列的元素 python3 已經無此函式
len(list) 串列元素個數
max(),min() 回串列元素最大值、最小值
- 方法 方法和函式類似,同樣封裝了獨立的功能,但是方法是只能依靠類或者物件來呼叫的,表示針對性的操作,
- 常用方法:
list.append(obj) 追加元素
list.count(obj) 統計某個元素出現的次數
list.insert(index, obj) 將某個元素插入到指定位置
1)串列元素的查找
#串列元素的查找,增加,洗掉
print('----------------查找-------------------')
list1=['love',22,24,26,28,'pyton',True]
print(list1)
print(list1[0]) #通過序列號(從0開始)來查找對應串列中的第一個元素[下標0]
print(list1[1:4]) #輸出串列中第2個到第5個元素[下標從1開始到第4],包含下標1不包含下標4
print(list1[2:]) #輸出串列中第3個之后所有元素[下標2開始后所有]
print(list1[::-1]) #倒序輸出
print(2*list1)#復制
- 結果如下:

2)串列元素的增加
print('----------------增加-------------------')
list2=['python',1,2,3,4,True]
# append() 方法向串列的尾部添加一個新的元素
print('追加之前',list2)
list2.append(22) #追加單個元素
print('追加單個元素之后',list2)
list2.append([22,33,'abc']) #將整個串列作為一個元素插入
print('追加整個串列(作為一個元素)之后',list2)
# extend()方法只接受一個串列作為引數,并將該引數的每個元素都添加到原有的串列中,
list3=['python',1,2,3,4,True]
list3.extend([99,90])
print('添加串列中每個元素之后',list3) #添加每個元素
- 結果如下:

3)串列元素的洗掉
print('----------------洗掉-------------------')
# del
list4=[1,2,3,'python',True]
print('del洗掉之前',list4)
del list4[0]
print('del洗掉第一個元素之后',list4)
list4=[1,2,3,'python',True]
del list4[1:3]
print('del洗掉第2個到第4個元素之后',list4) #即洗掉下標為1,2的元素,不包括下標3
#remove() 移除指定的元素 引數是具體的資料值
list4=[1,2,3,'python',True]
print('remove洗掉之前',list4)
list4.remove(3)
print('remove洗掉數值為3的元素之后',list4)
list4.remove('python')
print('remove洗掉數值為python的元素之后',list4)
#pop() #移除指定的項 引數是索引值
list4=[1,2,3,'python',True]
print('pop洗掉之前',list4)
list4.pop(3)
print('pop洗掉下標為3的元素之后',list4)
- 結果如下:

4)串列元素的修改
print('----------------修改-------------------')
list5=[11,22,33,'python',True]
print('修改之前',list5)
list5[0]='我'
print('修改第一個元素之后',list5)
- 結果如下:

3、元組
3.1、關于元組
- 元組 tuple
Python的元組與串列類似,不同之處在于元組的元素不能修改,
元組使用小括號(),串列使用方括號[],
元組創建很簡單,只需要在括號中添加元素,并使用逗號隔開即可,
print('----------------------元組-----------------------')
tupleA=() #空元組
print(tupleA)
print(type(tupleA))
tupleB=(1,) #當元組中僅一個元素時,必須以逗號結尾才表示元組
print(tupleB)
tupleC=(1,2,3,'python',True)
print(tupleC)
- 結果如下:

3.2、元組的訪問
元組也是序列,元組可以使用下標索引來訪問元組中的值,如下實體:
print('----------------------元組查詢訪問-----------------------')
tuple1=(1,2,3,4,'python',True)
print(tuple1[0]) #訪問第一個元素(即下標為0的元素)
print(tuple1[1:5]) #訪問第第2到第6個元素(即下標1到下標5),不包括最后一個
print(tuple1[::-1]) #倒序訪問
print(tuple1[::-2]) #倒序訪問,每隔一個訪問一次(即每兩個訪問一次)
print(tuple1[-4:-1]) #倒序訪問,從倒數第4個到倒數第1個(即下標-4到-1),不包括最后一個
- 結果如下:

3.3、元組的修改
元組中的元素值是不允許修改的,但我們可以對元組進行連接組合,也可以修改元組中的串列元素,如下實體:
print('----------------------元組的修改-----------------------')
tuple1=(22,33,44,'python',True,[1,2,3])
tuple2=(1,2,3,'心情很好')
print(tuple1)
print(tuple2)
# tuple2[0]='我' #執行報錯,不能單獨修改元組元素
tuple1[5][1]=11 #修改元組tuple下標5(序列)中的第一個元素(下標為0)為11
print('修改元組tuple1中序列中的元素后',tuple1)
print(tuple1+tuple2) #通過‘+’拼接兩個元組
print(2*tuple2) #元組的復制
- 結果如下

3.4、元組的洗掉
元組中的元素值是不允許洗掉的,但我們可以使用del陳述句來洗掉整個元組,如下實體:
print('----------------------元組的洗掉-----------------------')
tuple1=(22,33,44,'python',True,[1,2,3])
print('洗掉之前',tuple1)
del tuple1
print('洗掉之后',tuple1) #洗掉之后報錯,因為整個元組已經洗掉不存在了
- 結果如下:

4、字典
- 字典 也是python中重要的資料型別,字典是有 鍵值對 組成的集合,通常使用 鍵來訪問資料,效率非常高,和list一樣 支持對資料的添加、修改、洗掉
特點:
1:不是序列型別 沒有下標的概念,是一個無序的 鍵值集合,是內置的高級資料型別
2:用{} 來表示字典物件,每個鍵值對用逗號分隔
3:鍵 必須是不可變的型別【元組、字串】 值可以是任意的型別
4: 每個鍵必定是惟一的,如果存在重復的鍵,后者會覆寫前者
print('-------------------字典------------------------')
dict1={} #空字典
print(dict1,type(dict1))
dict1['name']='tom' #key : value(鍵值對)
dict1['sex']='男'
print(dict1)
dict1= {'name':'tom','sex':'男','age':10,'def':'程式員'} #宣告字典時添加
print(dict1)
print('---------------一次定義多個資料型別,輸出-----------------')
str1,list2,tuple3,dict4='I love python',[1,2,3,'python',True],(11,22,33,'python'),{'name':'tom','sex':'男'}
print(str1,type(str1))
print(list2,type(list))
print(tuple3,type(tuple3))
print(dict4,type(dict4))
- 結果如下:

4.1、字典的訪問
通過鍵(key)來進行訪問:
print('-------------------字典的訪問------------------------')
dict1= {'name':'tom','sex':'男','age':10,'def':'程式員'} #宣告字典時添加
print('通過name鍵訪問姓名:',dict1['name']) #通過字典的鍵‘name' 來訪問字典中對應元素
#獲取字典所有鍵 dict.keys()
print('獲取字典所有鍵:',dict1.keys())
#獲取字典所有值 dict.values()
print('獲取字典所有值:',dict1.values())
#獲取字典所有鍵值對 dict.items()
print('獲取字典所有鍵值對:',dict1.items())
#也可以通過for回圈遍歷輸出
print('通過for回圈輸出:')
for key,value in dict1.items():
print('%s:%s'%(key,value))
- 結果如下:

4.1、字典的修改更新
print('-------------------字典的修改更新------------------------')
dict1= {'name':'tom','sex':'男','age':10,'def':'程式員'}
print('修改之前',dict1.items())
dict1['age']=32
print('修改age之后',dict1.items())
#通過update()方法更新或新增
dict1.update({'def':'高級程式員','pos':'四川'})
print('update修改并新增之后',dict1.items())
- 結果如下:

4.1、字典的洗掉
print('-------------------字典的洗掉------------------------')
dict1= {'name':'tom','sex':'男','age':10,'def':'程式員'}
print('洗掉之前',dict1.items())
del dict1['name']
print('del洗掉name之后',dict1.items())
dict1.pop('sex')
print('pop洗掉sex之后',dict1.items())
- 結果如下:

5、mysql知識擴展
- 關于左右連接后 and 和 where的區別
on比where起作用更早,先根據on條件進行多表的連接操作,生成一個臨時表再通過where來篩選,(即on 后面的作為連接條件,而where是連接后做過濾篩選)
SQL> select * from t_user;
NAME BANJI XINGBIE NIANLING
----------- ----------- ----------- ---------------------------------------
張一 二班 男 18
張一 一班 女 22
張一 一班 男 18
李二 一班 女 19
張三 二班 男 20
李四 二班 女 18
王五 三班 男 19
劉六 三班 女 20
SQL> select * from chengji;
NAME KECHENG FENSHU
----------- ----------- ---------------------------------------
張三 語文 81
張三 數學 75
張三 英語 90
李四 語文 76
李四 數學 90
李四 英語 80
王五 語文 81
王五 數學 100
王五 英語 90
- and 條件 此時on 后面所有的and 都作為左連接的條件,左表中所有的學生均顯示,右表只列出滿足條件的(即右表分數大于等于90的)
SQL> select t1.name,t2.name,t1.banji,t2.fenshu from t_user t1 left join chengji t2 on t1.name=t2.name and fenshu >= 90;

- where 條件 由下面第一條陳述句可知,左連接的條件是 t1.name=t2.name and fenshu > 60,左表顯示所有,右表顯示滿足條件的(成績大于60);而第二條陳述句左連接的條件僅有 t1.name=t2.name,此時會列出左表所有和右表滿足on條件的,此時已經生成一個臨時表,最后再通過where來過濾,則只會保留滿足where條件的值,
SQL> select t1.name,t2.name,t1.banji,t2.fenshu from t_user t1 left join chengji t2 on t1.name=t2.name fenshu > 60;
SQL> select t1.name,t2.name,t1.banji,t2.fenshu from t_user t1 left join chengji t2 on t1.name=t2.name where fenshu >= 90;

參考資料: runob.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232576.html
標籤:python
