3.1 Python中的索引和切片
3.1.1 Python中的索引
◆索引:我們可以直接使用索引來訪問序列中的元素,同時索引可分為正向和負向兩種,而切片也會用到索引,支持字串(String)、串列(List)、元組(Tuple)【不可變】,但不支持集合和字典【可變】,
◆序列:包括字串(String)、串列(List)、元組(Tuple)、集合和字典,
下面放上一個圖,有助于大家理解正、負向索引的區別,如圖所示:

?正向索引取值,例:
str='python' print(str[0])#輸出p print(str[3])#輸出h
print(str[6])#報錯,索引越界string index out of range
?負向索引取值,例:
str='python' print(str[-1])#輸出n
3.1.2 Python中的切片
◆切片:指對操作的物件截取其中一部分的操作,字串、串列、元組都支持切片操作,
◆切片的語法:[start_index : end_index : step]
?start_index表示起始索引,即索引開始的位置
?end_index表示結束索引,即結束索引的步長,
?step表示步長,即表示選取間隔,步長不能為0,且默認值為1
★注意:切片操作是指按照步長,截取從起始索引到結束索引,但不包含結束索引(也就是結束索引減1)的所有元素,
Python中的切片實體 : str='python'
?print(str[0:3])#從索引0開始到第三位結束,不包含第三位,即0,1,2位 print(str[1:3]) print(str[2:-1])
?print (str[:-1])#不設起始索引,默認從0位開始
★切片反轉:str='python' print(str[::-1])#輸出nohtyp
?print (str[2:])#不設結束索引,默認取到末尾
?print (str[1:6:3])#輸出yo
?print(str[-1:-5])#步長為正則從左往右取值,結果為空
print(str[-5:-1])#輸出ytho
?print(str[-1:-5:-1])#從右往左確定數位,步長為負則從右往左取值#輸出noht
?print(str[2::-1])#輸出typ print(str[:2:-1])#noh
?print(str[::-1])#輸出nohtyp print(str[::1])#輸出python
print(str[::-2])#輸出結果為nhy
print(str[::2])#輸出結果為pto
反轉輸出面試題常遇:
print(str[-2:-5:-1])#輸出結果為oht
print(str[-5:-1:-1])#輸出結果為空
3.2 Python中的字串
3.2.1 字串
?字符:指類字形單位或符號,包括字母、數字、運算子號、標點符號和功能性符號以及其它字符,通常由8個二進制位(一個位元組)表示一個字符,
?字串:常用‘str’表示,由一連串字符組成,是Python中最常用的資料型別,用單引號''或者雙引號""來創建字串,
例:str1 = 'hello Kitty' str2 = "hello Kitty"
3.2.2 字串常用函式
字串常用函式定義:表示每個輸入值對應唯一輸出值的一種對應關系,
◆?capitalize():使字串首字母大寫
str1='hello_are_you_ok' print (str.capitalize())
?title():使字串首字母大寫
str1='hello_are_you_ok' print(str1.title())
★區別:capitalize只有整個字串的第一個字母大寫,title作用于整個字串內的單詞的首字母大寫,
◆lower():將字串中所有字母轉換為小寫字母輸出
str='ADFASDF' print (str.lower())#輸出adfasdf
◆upper():將字串中的所有字符轉換為大寫字母輸出
str='AsWRsdfsdfDSF' print (str.upper())#輸出ASWRSDFSDFDSF
◆count():統計具體字符出現的次數
str = 'abcad' print (str.count('a'))
◆join():把集合中的字符按自定義的分隔符連接在一起
str ="abcad" print ('-'.join(str))#輸出a-b-c-a-d
◆split():把字串通過指定的識別符號進行分割
str ="abcad" print (str.split('b'))#指定分隔符存在時,去掉分隔符,剩下元素保留并轉化為一個串列,如['a', 'cad']
print (str.split('*'))#指定分隔符不存在時,所有元素轉化成一個串列,如:['abcad']
?例:把hello_python轉化為HelloPython.
方法1:str='helo_python' 方法2:s='helo_python'
st=str.title() s1=s.title().split('_')
s=st.split('_') print(s1[0]+s1[1])
print(s[0]+s[1])
#輸出HeloPython
◆strip(ab):洗掉字串開頭和結尾有a或b的字符
str ="abcad" print (str.strip('ab'))#輸出cad
str ="abcad" print (str.strip('ac'))#輸出bcad
str ="abcad" print (str.strip('ad'))#輸出bc
◆lstrip(ab):洗掉字串開頭有ab序列字符
str ="abcad" print (str.lstrip('a'))
#輸出bcad
◆rstrip(ab):洗掉字串結尾有ab序列字符
?str ="abcad" print (str.rstrip('d'))#輸出abca
?s="abc_abc_abc_abc"print(s.lstrip('ac'))#bc_abc_abc_abc
?print(s.rstrip('acb'))#輸出abc_abc_abc_
◆startswith():判斷字串是否以什么開始
str ="abcad" print (str.startswith('a'))
#這里輸出結果為true或false
◆endswith():判斷字串是否以什么結束
?str ="abcad" print (str.endswith('d'))
#這里輸出結果為true或false
?例:nasa=input('請上傳正確的檔案:')
if nasa.endswith('.txt'):
print('上傳成功')
else:
print('上傳失敗')
◆find()/rfind():字串查詢find()是從左邊開始查,rfind()是從右邊開始查,確定元素后,最終下標結果依據正向索引顯示
str1 ="duoguladuo.test" print (str1.find("o"))#輸出2
print (str1.rfind("o"))#輸出9 print (str1.rfind("l"))#輸出5
◆replace():replace(substring,newstring,max) substring表示被替換的字串,newstring要替換字串,max表示替換的次數
str2='duoguladuo.test' ?print(str2.replace('g','t'))#duotuladuo.test
?print(str2.replace('g','t',2))#duotuladuo.test#替換兩個前往后
?print(str2.replace('o','s'))#替換次數不填,默認替換全部#dusguladus.test
?print(str2.replace('o','s',1))#dusguladuo.test
◆isdigit():判斷字串中是否全為數字
str='abcd' print (str.isdigit())
◆isalpha():判斷字串中是否全為字母
str='abcd' print (str.isalpha())
◆isalnum():判斷字串當中是否全都為數字,全為字母,或者數字字母組合,回傳布林值:True和False 如果有特殊符號就是否
str='1234aa@#$' print (str.isalnum())
◆istitle():判斷字串中首字母是否為大寫,其他是否為小寫,其他不為小寫則為否
?str='PyThon' print(str.istitle())#輸出False
?str='Python' print(str.istitle())#輸出True
◆isupper()/islower():is開頭的就是判斷一個字串是否展示為都是大寫或者都是小寫
?str.isupper() 是否全大寫 ?str.islower()是否全小寫
3.3 Python中的串列
3.3.1 Python中的串列定義
◆串列(list):是一組有序存盤的資料,也是python常見的序列之一,序列中的每個元素都分配一個索引,第一個元素索引是0,第二個元素索引是1,依此類推,序列都可以進行的操作包括索引,切片,加,乘,檢查成員,
◆串列表達符號:[] 查看串列型別:print(type(表名))
◆定義串列的方法:
?方法一:list1 = [1,2,3,4] #直接通過[]進行定義
?方法二:list2 = list('1234') #使用list()方法進行定義
3.3.2 串列中對應的函式
◆索引和切片賦值
list1 = [1,88,'test','duoceshi'] list1[0] = 666
list1[2:] = list('123')
?例(索引賦值):str='password' dj=list(str) dj[0]='PW' print(dj)#輸出['PW', 'a', 's', 's', 'w', 'o', 'r', 'd']
?例(切片賦值):dj=['PW', 'a', 's', 's', 'w', 'o', 'r', 'd']
dj[0:1]='MN' print(dj)
#輸出['M', 'N', 'a', 's', 's', 'w', 'o', 'r', 'd']
?dj=['PW', 'a', 's', 's', 'w', 'o', 'r', 'd'] dj[2:]=list('MN')(或dj[2:]='MN') print(dj)#輸出['PW', 'a', 'M', 'N']
◆append函式:添加一個元素
list1 = [1,2,3,4] list1.append('duoceshi') print (list1)
◆extend函式:連接兩個串列
list1=[1,2,3,4,5] list2 =[6,7,8] list1.extend(list2)
print(list1) #輸出[1, 2, 3, 4, 5, 6, 7, 8]
★注意:
?extend與append方法的相似之處在于都是將新接收到引數放置到已有串列的后面,
?append方法可以接收任意資料型別的引數,并且追加到list尾部;?extend方法一般和串列還有字串進行拼接,不能與int進行拼接,
◆insert(index,value)函式:在指定位置插入一條資料
list1 = [1,2,3,4] list1.insert(0,'test') print(list1)
#輸出['test', 1, 2, 3, 4]
◆remove函式:移除元素
list1 = [1,2,3,4,1] list1.remove(1)#輸出[2,3,4,1]
★注:如果串列中有多個相同的元素,會洗掉前面那個
◆del函式:索引洗掉值
list1 = [1,2,3,4] del list1[0] #輸出[2,3,4]
◆index函式:在串列中查找元素所對應的索引值
list1 = [1,2,3,4] print(list1.index(1))#輸出0
◆sort函式:實作串列的排列
list1 = [1,2,3,4,1] list1.sort() print(list1)
#輸出[1, 1, 2, 3, 4]
◆sorted函式:實作串列的降序排列
list1 = [1,2,3,4,1] ?print(sorted(list1,reverse=True))#輸出[4, 3, 2, 1, 1]降序排序
?print(sorted(list1,reverse=False))#輸出[1, 1, 2, 3, 4]升序排序
reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)
★sort 與 sorted 區別:
?sort 是應用在 list 上的方法,sorted 可以對所有可迭代的物件進行排序操作,
?list 的 sort 方法回傳的是對已經存在的串列進行操作,無回傳值,而內建函式 sorted 方法回傳的是一個新的 list,而不是在原來的基礎上進行的操作,
◆reverse函式:串列元素反轉
list1 = [1,2,3,4] list1.reverse() print(list1)
#輸出[4, 3, 2, 1]
◆pop函式:
list1 = [1,2,3,4] print(list1.pop(2))#輸出3
Print(list1.pop())#輸出4
?默認移除串列最后一個元素,并回傳元素的值
?移除指定位置的元素list1.pop(0)表示移除第一個元素
?在串列中pop函式是唯一一個既能改變串列元素又有回傳值
◆串列中文列印亂碼解決方法
a = [1,2,3,"中國"] print (str(a).decode('string_escape'))
?decode():指定編碼格式
?★string-escape:編碼格式,能解決因為被\轉義的問題
3.4 Python中的元組
3.4.1 Python中的元組定義
元組(tuple):是Python中常用的一種資料結構,元組由不同的元素組成,每個元素可以存盤不同型別的資料,如字串、數字、甚至元組,元組是'寫保護'的,即元組中元素作為一個整體,創建后不能再做任何修改操作,
◆元組表達符為:()
◆元組的定義:tuple1=(1,2,3)
★注意:當元組只有一個元素時,后面要加逗號,如:tuple1=(1,)
3.4.2 元組中常見的操作
◆元組與串列呼出方式類似
turple1=('a','b','c','d') print(tuple[0])
◆元組轉換為串列
tuple1 = ('a','b','c','d') list1=list(tuple1)
print(list1,type(list1))
◆串列轉換為元組
list1=[1,2,3,4] tuple1=tuple(list1) print(tuple1,type(tuple1))
◆元組中的值是不可以直接改變的
tuple1=('a','b','c') tuple1.insert(0,'d')
print(tuple1)
◆元組中的值是可以間接來改變
?tuple1 = ('a', 'b', 'c', 'd') list1 = list(tuple1) #先改成串列 list1[1] = 'test' #通過串列改值
tuple1 = tuple(list1) #在轉換成元組 print(tuple1)
★商湯科技面試題:
1>元組可以被改變嗎?
當元組的元素作為一個整體時是不可以改變的,但是可以間接進行修改,首先把元組轉換為串列,再進行修改元素,修改后再轉換成元組
2>元組和串列的區別?
?定義符不一樣.元組是(),串列是[],list表示串列,tuple表示元組
?元組是不能被修改的,串列是可以被修改的
?元組用于儲存異構資料,即當做一個沒有欄位名的記錄來使用,比如用元組來記錄一個人的身高、體重、年齡資訊,記錄形式為:
person=(‘zhangsan’,180,80,20)
list[‘香蕉’,‘蘋果’,‘獼猴桃’]
?元組是不可變型別,大小固定,串列是可變資料型別,資料可以動態變化,所以在記憶體占用方面,同樣大小的資料,元組占用記憶體更少
3>如何修改串列里的元素
List=[1,2,3,4,5,6]#定義一個串列 list[0]=9#通過索引的方式把要修改的元素取出并進行賦值,以及通過一些串列函式修改元素 print(list)
4>如何修改元組中串列里的元素,比如把大娃改成大總
tuple=('董事長','總經理','合伙人',['大娃','二娃','三娃','四娃'])
tuple[3][0]='大總' print(tuple)#輸出('董事長', '總經理', '合伙人', ['大總', '二娃', '三娃', '四娃'])
3.4.3元組和串列的區別
★相同: ?都是序列型別的容器物件,可以存放任何型別的資料
?支持切片、迭代等操作
★不同: ?list 是可變的物件,元組tuple是不可變的物件
?tuple不可變,所以使用tuple可以使代碼更安全
3.5 Python中的字典和集合
3.5.1 Python中的字典定義
字典(dict):是另一種可變容器模型,且可存盤任意型別物件,存放一系列具有映射關系的資料結構,字典是無序的,是以key:value的形式存盤資料
◆字典的每個鍵值key:value對用冒號:分割,每個鍵值對之間用逗號分割,整個字典包括在大括號{}中
◆字典同時是無序,字典都是以鍵值對的形式存在,先鍵后值,鍵是唯一的,值且不唯一
◆字典表達符:{}
◆字典的定義方式:
?法一:dict1={'name':'dishini','age':18} #通過{}直接定義
?法二:list = [('a',1),('b',2),('c',3)] dict2 = dict(list) #通過dict()方法定義
取值:通過key取value,例:dict==dict(list) print(dict)
3.5.2 字典中常見的函式
◆添加一個鍵值對
?dict1 = {"name":"xiaowang","age":"10"}
dict1['class']=1834 如果字典里已經有這個鍵,舊資料將會替換
print(dict1)
?#設定鍵絕對setdefault 類似添加
dict={'name':'zhangsan','age':18}
dict.setdefault('sex','男') print(dict)
#輸出{'name': 'zhangsan', 'age': 18, 'sex': '男'}
?#如果字典存在鍵時,此時設定鍵值無效
dict.setdefault('sex','女') print(dict)
#輸出{'name': 'zhangsan', 'age': 18, 'sex': '男'}
◆字典添加元素setdefault()
dict1 = {'name':xiaowang,'age':18}
dict1.setdefault('sex','1')
print (dict1)
注:如果插入資料鍵已經在字典里,插入是不生效的,默認值為空時,插入資料為None
◆del洗掉字典
dict1 ={"name":"xiaowang","age":"18","sex":"1"}
del (dict1)
print(dict1)
◆取出鍵回傳串列
dict1 = {"name":"xiaowang","age":"10"}
print (dict1.keys())
或
dict1 = {"name":"xiaowang","age":"10"}
print(key) 或
for i in dict.keys() #key存到i中
print(i)
◆取出值回傳串列
dict1 = {"name":"xiaowang","age":"10"}
print (dict1.values())
◆取出具體鍵的值
?dict1 = {"name":"xiaowang","age":"10"}
print (dict1['name'])
?取出具體的鍵以及對應鍵的值
dict={'name':'zhangsan','age':18}
for key in dict:
print(key,dict[key])#列印字典的鍵以及對應的值
#輸出name zhangsan age 18
?取出具體的鍵以及對應鍵的值,并以串列形式回傳
dict={'name':'zhangsan','age':18,'sex':'男'}
for i,j in dict.items(): print(i,j)
#輸出name zhangsan
age 18
sex 男
◆del洗掉指定的鍵,連同值也洗掉
dict1 ={"name":"xiaowang","age":"18","sex":"1"}
del (dict1["name"])
print (dict1)
◆pop(key)函式,洗掉指定鍵并回傳該指定鍵被洗掉的值
dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
print(dict.pop('name'))#輸出zhangsan
◆clear()清空字典所有項
dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
dict.clear() print (dict)
或print(dict.clear())#輸出None
再列印print(dict)#輸出{}
◆get(key)方法,通過key獲取值,當鍵不存在,回傳None(介面測驗常用)
dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
print(dict.get('age'))#輸出18
◆fromkeys 函式初始化,函式可以給具體的鍵指定值
dict={}.fromkeys(['name','age'])#初始化字典,不指定,值默認
print(dict)#輸出{'name': None, 'age': None}
dict['name']='老六'#指定值
print(dict)#輸出{'name': '老六', 'age': None}
◆has_key函式或__contains__函式檢查字典是否有指定的鍵,有回傳True,沒有回傳False
?dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
print(dict.__contains__('name')) #回傳true,因為鍵存在
?★dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
if dict.__contains__('nasa'):
print('存在此鍵')
else:
dict.setdefault('nasa','masike')
print(dict)
#輸出{'name': 'zhangsan', 'age': 18, 'sex': '男', 'nasa': 'masike'}
◆popitem函式隨機回傳并洗掉字典中的鍵值對(一般洗掉末尾對)
如果字典已經為空,卻呼叫了此方法,就報出KeyError例外
dict1 = {'name':xiaowang,'age':18,'class':24}
dict1.popitem()
print (dict1)#輸出{'name': 'zhangsan', 'age': 18}
print (dict1.popitem())#輸出('sex', '男')
print (dict1)#輸出{'name': 'zhangsan', 'age': 18}
◆update函式利用一個字典更新另外一個字典
dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
dict1={'class':1832}
dict.update(dict1)
print(dict)#輸出{'name': 'zhangsan', 'age': 18, 'sex': '男', 'class': 1832}
★注意:如果要更新的元素項在原字典里存在,則把原來的項覆寫
dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
dict1={'age':1832}
dict.update(dict1)
print(dict)#輸出{'name': 'zhangsan', 'age': 1832, 'sex': '男'}
◆字典的遍歷:for...in...遍歷字典
dict1 = {'name':xiaowang,'age':18}
for key in dict1:
print (key,dict1[key])
◆使用items()完成遍歷,取鍵和值
dict1= {'name':xiaowang,'age':18}
for key,value in dict1.items():
print (key,value)
3.5.3 Python中的集合
◆集合:最重要的功能就是去重
?可變集合set
set1.add('dcs')
set1.remove('dcs')
→test='hello'
m=set(test)
print(m)#輸出{'h', 'e', 'l', 'o'}
print(type(m))#輸出<class 'set'>
m.clear()#清空
print(m)#輸出set()
m.pop()
print(m)#輸出{'e', 'o', 'l'}#把集合最前面這個給洗掉了
→list1 = [1,88,8,6,'hello']
list1.pop()
print(list1)#輸出[1, 88, 8, 6]#把串列最后面這個給洗掉了
【拓】str='七夕節快樂'
for i in str:
print(i,end='')#輸出七夕節快樂
?不可變集合frozenset
test = 'hello'
a = frozenset(test)
b = a.copy()
b.add('888') #報錯AttributeError: 'frozenset' object has no attribute 'add'
print (b)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502312.html
標籤:其他
