Python學(xué)習(xí) day3-2021.3.1(高級數(shù)據(jù)類型)


Python入門課程系列:


序列(sequence):序列是python中最基本的數(shù)據(jù)結(jié)構(gòu)赎瞎。序列是一組按照順序排列的值,其中的元素帶編號(編號從0開始)
在python中,存在三種內(nèi)置的序列類型 ,即:字符串、列表和元組威兜。其中列表是可變的(你可修改其內(nèi)容),而元組和字符串是不可變的(一旦創(chuàng)建,內(nèi)容就是固定的)熟史。
字典不屬于序列,沒有下標窄俏,不能取切片

優(yōu)點:可以支持索引和切片的操作
特征:第一個正索引為0蹂匹,指向是從左往右。當使用負數(shù)索引時凹蜈,Python將從右(即從最后一個元素)開始往左數(shù)限寞,因此-1是最后一個元素的位置。

??1. 字符串及常用方法

所有標準序列操作(索引仰坦、切片履植、乘法、成員資格檢查悄晃、長度玫霎、最小值和最大值)都適用于字符串,但字符串是不可變的妈橄,因此所有的元素賦值和切片賦值都是非法的庶近。

  • 將值轉(zhuǎn)換為字符串并設(shè)置其格式是一個重要的操作,主要的解決方案是使用字符串格式設(shè)置運算符——百分號眷蚓。在%左邊指定一個字符串(格式字符串)鼻种,并在右邊指定要設(shè)置其格式的值。指定要設(shè)置其格式的值時溪椎,可使用單個值(如字符串或數(shù)字)璧南,可使用元組(如果要設(shè)置多個值的格式)刨摩,還可使用字典敞曹,其中最常見的是元組丧靡。
  • %s稱為轉(zhuǎn)換說明符,指出了要將值插入什么地方歉秫。s意味著將值視為字符串進行格式設(shè)置蛾洛。如果指定的值不是字符串,將使用str將其轉(zhuǎn)換為字符串。其他說明符將導(dǎo)致其他形式的轉(zhuǎn)換轧膘。例如钞螟,%.3f將值的格式設(shè)置為包含3位小數(shù)的浮點數(shù)。

難點
1.字符串常用方法
2.切片操作
?? 切片:可以根據(jù)下標來獲取序列對象的任意部分數(shù)據(jù)谎碍,語法結(jié)構(gòu)[start:end:step]鳞滨,step默認為1。
??切片是左包含右不包含
3.與其他類型綜合操作

字符串及常用方法 ??「方法是與對象(列表蟆淀、數(shù)拯啦、字符串等)聯(lián)系緊密的函數(shù)。通常熔任,調(diào)用方法: object.method(arguments)褒链。方法調(diào)用與函數(shù)調(diào)用很像,只是在方法名前加上了對象和句點」

常用字符串函數(shù)疑苔。此外甫匹,常見函數(shù)還有:1.center(通過在兩邊添加填充字符(默認為空格)讓字符串居中);
Test="python"
print('Test的內(nèi)存地址%d'%id(Test)) #id函數(shù)可以查看一個對象的內(nèi)存地址
Test1=Test #這里只是把Test對象的地址賦給了Test1惦费,Test和Test1的ip地址是一樣的
print(type(Test))
print('獲取第一個字符%s'%Test[0])

#取切片操作
strMsg='hello world'
#slice[start:end:step] #左閉右開  范圍:start<=value<end
print(strMsg)  #輸出完整的數(shù)據(jù)
print(strMsg[0])   #輸出第一個數(shù)據(jù)
print(strMsg[2:5]) #取第三個到第五個數(shù)據(jù)之間數(shù)據(jù)
print(strMsg[2:])  #從第三個值取到最后
print(strMsg[:3])  #從第一個值取到第三個
print(strMsg[::-1]) #倒序輸出負號表示方向是從右往左

#常用函數(shù)操作
#1. 首字母大寫
name='peter'
print('姓名首字母轉(zhuǎn)換大寫%s'%name.capitalize())

#2. 刪除空格
a='      hello      '
b=a.strip()  #strip是刪除空格兵迅,lstrip是刪除左邊空格,rstrip是刪除右邊空格
print(b)

#3. 查找某個字符是否在某個字符串內(nèi)
dataStr='I love python'
print(dataStr.find('p')) #查找目標對象在序列對象中的位置趁餐,返回第一個下標值喷兼,沒找到返回-1,并非返回布爾值
print(dataStr.index('l')) #檢測字符串中是否包含子字符串后雷,返回第一個下標值,沒找到會報錯

#4. 判斷字符串的開頭和結(jié)尾
dataStr='I love python'
print(dataStr.startswith('I'))
print(dataStr.endswith('I'))

#5. 大小寫轉(zhuǎn)換
print(dataStr.upper())
print(dataStr.lower())

#6. join 其作用與split相反吠各,用于合并序列的元素臀突。
#所合并序列的元素必須都是字符串。
seq = [1, 2, 3, 4, 5]
sep = '+'
sep.join(seq) # 嘗試合并一個數(shù)字列表會報錯
#Traceback (most recent call last): 
 #File "<stdin>", line 1, in ? 
#TypeError: sequence item 0: expected string, int found
seq = ['1', '2', '3', '4', '5']
print(sep.join(seq)) # 合并一個字符串列表
# '1+2+3+4+5'

????2. 列表及常用方法

list:python中非常重要的數(shù)據(jù)結(jié)構(gòu)贾漏,是一種有序的數(shù)據(jù)集合
內(nèi)置函數(shù)list可以將字符串轉(zhuǎn)化成列表
特點:
1.支持增候学、刪、改纵散、查
2.列表中的數(shù)據(jù)是可以變化的【數(shù)據(jù)項可以變化梳码,內(nèi)存地址不會改變】
3.用[]來表示列表類型,數(shù)據(jù)項之間用逗號來分割 伍掀,注意:數(shù)據(jù)項可以是任意類型的數(shù)據(jù)
4.支持索引和切片來進行操作

列表與元組的主要不同在于:列表可以修改掰茶,元組不可以。這意味著列表適用于需要中途添加元素的情形蜜笤,而元組適用于處于某種考慮禁止修改序列的情形濒蒋。


列表及常用方法。除上面這些以外,還有1. clear(清空列表的內(nèi)容)沪伙;2. copy(復(fù)制列表)瓮顽;
li=[1,2,3,'你好'] #使用[]創(chuàng)建列表
print(len(li)) #len函數(shù)可以獲取列表對象中的數(shù)據(jù)個數(shù)/也可查看字符串中的字符數(shù)

#鑒于不能像修改列表那樣修改字符串,因此在有些情況下使用字符串來創(chuàng)建列表很有幫助围橡。
#為此暖混,可使用內(nèi)置函數(shù)list
a=list('Hello')
print(a)
#['H', 'e', 'l', 'l', 'o']   #將字符串轉(zhuǎn)換為列表

#取切片操作
listA=['abcd',789,12.23,'qiuzhi',True]
print(listA) #輸出完整列表
print(listA[0]) #輸出第一個元素
print(listA[1:3]) #獲取第2-3個元素
print(listA[2:]) #獲取3到最后一個元素
print(listA[::-1]) #倒序輸出
print(listA*2) #輸出兩遍【復(fù)制】

#修改
listA[0]='Peter'
print(listA)
listA[0]=1
print(listA)

#方法1: append 追加操作 
listA.append(['fff','ddd',333]) #在列表里面插入列表,插入的列表算一個元素翁授,只是這個元素又包含了三個元素
print(listA)
print(len(listA))

#方法2: insert 插入操作儒恋,需要指定位置
listA.insert(1,'新插入') #插入在第二個位置
print(listA)

#方法3: entend 拓展數(shù)據(jù),等于批量添加
rsData=list(range(10))
listA.extend(rsData)
print(listA)
listA.extend([11,12,13,14]) #直接追加也可以 ??和append不同
print(listA)

# 方法4: reverse 按相反的順序排列列表中的元素 
#??如果要按相反的順序迭代序列黔漂,可使用函數(shù)reversed诫尽。這個函數(shù)不返回列表,而是返回一個迭代器炬守,可使用list將返回的對象轉(zhuǎn)換為列表牧嫉。
x = [1, 2, 3]
x.reverse()
print(x)
#[3, 2, 1]

# 方法5: 刪除 del remove pop
listB=list(range(10,50))
print(listB)
del listB[0] #刪除第一個數(shù)據(jù)
print(listB)
del listB[1:3] #通過切片刪除多個數(shù)據(jù)(第二項到第三項)
listB.remove(20) #移除指定元素,括號內(nèi)的是需要移除的指定項
listB.pop(1) #移除指定元素减途,如果不指定酣藻,則移除第一個數(shù)據(jù)。pop后面的參數(shù)是需要移除的指定項的索引值
#??pop是唯一既修改列表又返回一個非None值的列表方法鳍置。

#??方法6: copy 復(fù)制列表
#常規(guī)復(fù)制只是將另一個名稱關(guān)聯(lián)到列表
a = [1, 2, 3]
b = a
b[1] = 4 #指向相同的內(nèi)存內(nèi)容
print(a)
# [1, 4, 3]
#要讓a和b指向不同的列表辽剧,就必須將b關(guān)聯(lián)到a的副本。
a = [1, 2, 3] 
b = a.copy() 
b[1] = 4 
print(a) 
# [1, 2, 3]

#??方法7: sort 于對列表就地排序税产。就地排序意味著對原來的列表進行修改怕轿,使其元素按順序排列,而不是返回排序后的列表的副本辟拷。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print(x)
# [1, 2, 4, 6, 7, 9]
x = [4, 6, 2, 1, 7, 9]
y = x.sort() # Don't do this!
print(y)  #鑒于sort修改x且不返回任何值撞羽,最終的結(jié)果是x是經(jīng)過排序的,而y包含None衫冻。
#None. 
#為實現(xiàn)前述目標诀紊,正確的方式之一是先將y關(guān)聯(lián)到x的副本,再對y進行排序
x = [4, 6, 2, 1, 7, 9]
y = x.copy()
y.sort()
print(x)
#[4, 6, 2, 1, 7, 9]
print(y)
#[1, 2, 4, 6, 7, 9]
#??或者使用函數(shù)sorted隅俘。實際上邻奠,這個函數(shù)可用于任何序列,但總是返回一個列表为居。
x = [4, 6, 2, 1, 7, 9] 
y = sorted(x) 
print(x) 
#[4, 6, 2, 1, 7, 9] 
print(y) 
#[1, 2, 4, 6, 7, 9]
#方法sort接受兩個可選參數(shù):key和reverse碌宴。
#這兩個參數(shù)通常是按名稱指定的,稱為關(guān)鍵字參數(shù)颜骤。
#參數(shù)key類似于參數(shù)cmp:你將其設(shè)置為一個用于排序的函數(shù)唧喉。然而不會直接使用這個函數(shù)來判斷一個元素是否比另一個元素小,而是使用它來為每個元素創(chuàng)建一個鍵,再根據(jù)這些鍵對元素進行排序八孝。因此董朝,要根據(jù)長度對元素進行排序,可將參數(shù)key設(shè)置為函數(shù)len干跛。
#對于另一個關(guān)鍵字參數(shù)reverse子姜,只需將其指定為一個真值(True或False),以指出是否要按相反的順序?qū)α斜磉M行排序楼入。
#函數(shù)sorted也接受參數(shù)key和reverse哥捕。在很多情況下,將參數(shù)key設(shè)置為一個自定義函數(shù)很有用嘉熊。

??3. 元組

元組是一種不可變的序列遥赚,在創(chuàng)建之后不能做任何的修改
元組語法很簡單,只要在括號中添加元素阐肤,并使用逗號分隔凫佛。
函數(shù)tuple的工作原理與list很像:它將一個序列作為參數(shù),并將其轉(zhuǎn)換為元組孕惜。如果參數(shù)已經(jīng)是元組愧薛,就原封不動地返回它。
元組可以用作映射中的鍵(以及集合的成員)衫画,而列表不行毫炉。

特點:
1.不可變
2.用()創(chuàng)建元組類型,數(shù)據(jù)項用逗號來分割
3.可以是任何的類型
4.當元組中只有一個元素時 削罩,要加上逗號瞄勾,不然解釋器會當作整型來處理
5.同樣可以支持切片操作

#tuple函數(shù)可以把序列轉(zhuǎn)為tuple。
a=tuple('1,2,3') #并不是創(chuàng)建了包含1,2和3的tuple鲸郊,而是單引號包含了1 2 3和兩個逗號這五個元素的字符串丰榴,a是把這個字符串轉(zhuǎn)為 tuple,所以有5個元素
print(len(a))
#5
print(a)
#('1', ',', '2', ',', '3')

for item in tupleA:
    print(item,end=' ')
    pass  #pass是一個占位符秆撮,能夠保證程序的代碼結(jié)構(gòu)正確,程序運行時换况,關(guān)鍵字不會執(zhí)行任何 操作
print(tupleA[2:4])
print(tupleA[::-1]) #倒序
print(tupleA[::-2]) #倒序 每兩個數(shù)取一個
print(tupleA[-2:-1:]) #倒著取下標為-2到-1之間的數(shù)據(jù)

#元組不可修改职辨,但元組中包含的列表中的數(shù)據(jù)可以修改
tupleA=('abcd',89,9.13,'peter',[11,12,13])
print(tupleA)
tupleA[4][0]=345
print(tupleA)

#當元組中只有一個元素時 ,要加上逗號
tupleB=('1')
print(type(tupleB))
tupleB=('1',)
print(type(tupleB))

#數(shù)值轉(zhuǎn)成元組
tupleC=tuple(range(10))
print(tupleC)
print(tupleC.count(8)) #統(tǒng)計8出現(xiàn)了幾次

????4. 字典及常用方法

字典是python中重要的數(shù)據(jù)類型戈二,字典是由鍵值對組成的集合舒裤,通常使用鍵來訪問數(shù)據(jù),效率非常高觉吭,和list一樣支持對數(shù)據(jù)的添加腾供、修改、刪除。
函數(shù)dict可以從其他映射(如其他字典)或鍵值對創(chuàng)建字典伴鳖。

特點:
1.不是序列類型节值,沒有下標概念 ,是一個無序的鍵值集合榜聂,是內(nèi)置的高級數(shù)據(jù)類型
2.用{}來表示字典對象搞疗,每個鍵值對用逗號分隔
3.鍵必須是不可變的類型【元組、字符串等】值可以是任意的類型
4.每個鍵必定是唯一的须肆,如果存在重復(fù)的鍵匿乃,后者會覆蓋前者


#創(chuàng)建/更新字典 (以前不存在,就直接創(chuàng)建豌汇,已經(jīng)存在就在原有基礎(chǔ)追加)
dictA={}
print(type(dictA))
#方法1
dictA['name']='hui' #左邊[]中的是鍵幢炸,右邊{}中的是value
dictA['age']='24'
dictA['pos']='med'
print(dictA)
#方法2
dictB={'name':'me','school':'tjmu'}
print(dictB)
#方法3  #使用dict函數(shù)從其他映射或鍵值對創(chuàng)建字典
items = [('name', 'Gumby'), ('age', 42)]
d = dict(items)
print(d)
#{'age': 42, 'name': 'Gumby'}
d['name']
# 'Gumby'
#方法4
dictA.update({'school':'hnmu'})
#方法5  fromkeys創(chuàng)建一個新字典,其中包含指定的鍵拒贱,且每個鍵對應(yīng)的值都是None宛徊。
a={}.fromkeys(['name', 'age'])
print(a)
# {'age': None, 'name': None}

#查找元素
print(dictB['name']) #通過鍵獲取對應(yīng)的值
dictB['name']='lee' #更改鍵對應(yīng)的值
print(dictB)
#獲取所有的鍵
print(dictA.keys())
#獲取所有的值
print(dictA.values())
#獲取所有的項/鍵值對
print(dictA.items())
for key,value in dictA.items():
    print('%s==%s'%(key,value))

#通過指定鍵來進行刪除
del dictA['name']
print(dictA)
dictA.pop('age')
print(dictA)

#對字典進行排序 ??
print(sorted(dictA.items(),key=lambda d:d[0]))
print(sorted(dictA.items(),key=lambda d:d[1]))

5. 共有操作

#合并
strA='人生苦短'
strB='我用python'
print(strA+strB)
listA=list(range(10))
listB=list(range(11,20))
print(listA+listB)

#復(fù)制
print(strA*3)
# 在位于屏幕中央且寬度合適的方框內(nèi)打印一個句子
sentense=input("請輸入Sentence:")
screen_width=80
text_width=len(sentense)
box_witdth=text_width+2
left_margin=(screen_width-box_witdth)//2
print()
print(' '*left_margin+'*'+'-'*(box_witdth-2)+'*')
print(' '*left_margin+'|'+' '*text_width+'|')
print(' '*left_margin+'|'+    sentense    +'|')
print(' '*left_margin+'|'+' '*text_width+'|')
print(' '*left_margin+'*'+'-'*(box_witdth-2)+'*')
                          *------------------------*
                          |                        |
                          |carpe diem,seize the day|
                          |                        |
                          *------------------------*

#in 判斷對象是否存在,結(jié)果是一個bool值
print('生' in strA)
print('20' in listA)
dictA={'name':'Peter'}
print('name' in dictA)

>課后練習(xí)題(答案見正文示例)

  1. 在位于屏幕中央且寬度合適的方框內(nèi)打印一個句子

>思考

  1. 方法與函數(shù)的區(qū)別
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者柜思。
  • 序言:七十年代末岩调,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赡盘,更是在濱河造成了極大的恐慌号枕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陨享,死亡現(xiàn)場離奇詭異葱淳,居然都是意外死亡,警方通過查閱死者的電腦和手機抛姑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門赞厕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人定硝,你說我怎么就攤上這事皿桑。” “怎么了蔬啡?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵诲侮,是天一觀的道長。 經(jīng)常有香客問我箱蟆,道長沟绪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任空猜,我火速辦了婚禮绽慈,結(jié)果婚禮上恨旱,老公的妹妹穿的比我還像新娘。我一直安慰自己坝疼,他們只是感情好搜贤,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著裙士,像睡著了一般入客。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腿椎,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天桌硫,我揣著相機與錄音,去河邊找鬼啃炸。 笑死铆隘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的南用。 我是一名探鬼主播膀钠,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裹虫!你這毒婦竟也來了肿嘲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筑公,失蹤者是張志新(化名)和其女友劉穎雳窟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匣屡,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡封救,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捣作。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誉结。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖券躁,靈堂內(nèi)的尸體忽然破棺而出惩坑,到底是詐尸還是另有隱情,我是刑警寧澤也拜,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布旭贬,位于F島的核電站,受9級特大地震影響搪泳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扼脐,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一岸军、第九天 我趴在偏房一處隱蔽的房頂上張望奋刽。 院中可真熱鬧,春花似錦艰赞、人聲如沸佣谐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狭魂。三九已至,卻和暖如春党觅,著一層夾襖步出監(jiān)牢的瞬間雌澄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工杯瞻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镐牺,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓魁莉,卻偏偏與公主長得像睬涧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旗唁,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容