溫故而知新:前面學習了三種序列,字符串、列表,元組
列表是可變的(內容可改變,但是id不變);
字符串、元組是不可變(里面內容變了,id也發(fā)生了變化;字符串/元組)
技巧:
dir():用來查詢一個類或者對象所有屬性,返回一個列表;
help():用來查詢的說明文檔。
例如: dir(li),help(li.append)
- 列表的常用方法
li = [1,2,3,4]
li.append(5) #在列表末尾添加新的對象
li.clear() #清空列表
id(li) #查看id內存
li.count(1) #統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù)。
iter() #用來生成迭代器可以一個一個從中取出來,3種序列都是可迭代的對象
li.extend([5,6]) #把可迭代的對象依次擴展原來的列表
li.index(obj) #從列表中找某個值第一個匹配項的索引位置。
li.pop(index) #出棧,移除列表中的一個元素(默認最后一個元素即下標-1的元素),并且返回該值
li.insert(index,obj) #按照指定的位置插入元素。
li.remove(obj) #移除首次出現(xiàn)指定的值
li.reverse() #反轉列表中的元素
li.sort() #排序,對原列表進行排序。列表中的元素要類型相同 (key = len)

image.png
- python內置函數(shù):
sorted() 和 reversed()
- 元組的方法:
t = (1,2,3,4,1,5,3)
t.count(obj) #統(tǒng)計某個元素在元組中出現(xiàn)的次數(shù)
t.index(obj) #從列表中找某個值第一個匹配項的索引位置
#注意:聲明只有一個元素的元組時要加逗號
#特點:不可變
- 字符串的常用方法
s = 'python'
s.count('t') #返回字符串s在t中出現(xiàn)的次數(shù),帶可選參數(shù)
s.startswith('p') #若字符串s以p開頭,返回True,否則False
s.endswith(‘n’) #若字符串s以n結尾,返回True,否則False
s.find('a') #如果找到a首次出現(xiàn)返回對應索引值,沒有找到返回-1(為啥不是0,1,是因為考慮到索引值存在0和1)
s.index(obj) #從字符串中找某個值第一個匹配項的索引位置,index找不到則會報錯
s.isalpha() #判斷是否純字母
s.isdigit() #判斷全是數(shù)字
s.upper() #轉化成大寫
s.lower() #轉化成小寫
s.islower () #測試是否全是小寫
s.isupper () #測試是否全是大寫
s.replace(old,new,[count]) #替換,數(shù)字代表次數(shù)
s.split() #拆分字符串,通過指定分隔符對字符串進行切片,并返回分割后的字符串列表(list),默認以空格分割,-1表示全切;
s.split(str,num) #str,num為可選參數(shù),str是分隔符,默認為空格' ',若字符串s中不存在指定的分隔符,則把整個字符串作為列表的元素,但是不能為空'',num是分割次數(shù),如果存在參數(shù)num,則僅分隔成 num+1 個子字符串,并且每一個子字符串可以賦給新的變量,默認是-1
s = 'haha lala'
s.split() >>>['haha','lala'] #默認為空格' '
s.split(' ') >>>['haha','lala'] #等同默認
s.split('') >>> ValueError: empty separator #但是不能為空''
s.split('p') >>>['haha lala'] #若字符串s中不存在指定的分隔符,則把整個字符串作為列表的元素
s.split('a') >>>['h', 'h', ' l', 'l', ''] #默認全切
s.split('a',-1) >>>['h', 'h', ' l', 'l', ''] #等同默認
s.split('a',2) >>>['h', 'h', ' lala'] #切割2次
------------------------
#注意如果以首尾相切空的問題:
s1 = 'aaabbbccc'
s1.split('b') => ['aaa', '', '', 'ccc'] #相當于每切一次以分隔符為中心將字符串切成兩邊,將左邊的丟到列表作為一個元素,然后按照切割次數(shù)依次往右邊切,第一次切分成'aaa'&'bbccc',第二次切從右邊'bbccc'切,分成''&'bccc',類似第三次則切'bccc',分成''&'ccc',然后將前面切的左邊和最后一個作為列表元素返回。
s1.split('b',2) => ['aaa', '', 'bccc'] #第一切'aaa'&'bbccc',第二次''&'bccc'
s1.split('a') => ['', '', '', 'bbbccc'] #第一切''&'aabbbccc',然后''&'abbbccc',再''&'bbbccc'
s1.split('a',1) => ['', 'aabbbccc']
s1.split('b',3) => ['aaa', '', '', 'ccc']
s1.split('c') => ['aaabbb', '', '', ''] #'aaabbb'&'cc',''&'c',''&''
s1.split('c',2) => ['aaabbb', '', 'c']
s1.join(seq) #將序列seq(列表,字符串,元組都可)中的元素(要全部為字符串對象)以指定的字符s1連接生成一個新的字符串。
#split與join的相愛相殺,相煎何太急
ipStr = '192.168.10.11'
ipList = ipStr.split('.') >>> ['192', '168', '10', '11'] #將字符串分割成列表
'.'.join(ipList) >>> '192.168.10.11' #將列表拼接成字符串
- 注意:
- new = s.replace('python','ladygaga') #忘記用一個變量接受了,因為replace返回的是str,也對應了字符串是不可變的,需要接受返回值,s='python',s[1]是錯誤的,因為字符串是不可變的,所以用replace;
- 列表操作,lis+=[2] 不等同于lis=lis+[2]
+=賦值運算,相當于將原列表擴展了與extend()方法效果一樣,id沒變;
+運算,是將原列表與新的相加,組成了新的列表,id變了

image.png
課后實踐
- 定義一個列表,li = [1,2]
①用至少三種方法往列表里面插值。
li.append(3) #列表后面追加對象
li.extend([4]) #往列表后面擴展可迭代的元素;
li +=[5] #賦值運算
li.insert(5,6) #將指定對象插入列表的指定位置。
②用至少三種方法替換列表中的某個元素。
li[5] = 0
li.remove(0) #移除指定元素
li.append(6) #追加值
li.pop(5) # 刪除指定索引的值
li.insert(5,6) #指定位置插入指定值
- s = 'hello python !' 如何把s 中的'python' 替換成'world'
newstr = s.replace('python','world') #用一個新的變量接受,因為replace返回的是新的列表對象
①將 s ='hello python !',轉換成列表 li=['hello','python','!']
li = s.split() >>> ['hello', 'python', '!']
②如何取出li列表里的‘hello’的最后一個字母'o'?
li[0][4]、li[0][-1]、li[-3][4]、li[-3][-1]
- 現(xiàn)有一個列表,請完成下列要求:
list_1 = ['1', ['2', 'hacker', 'dugujiujian'],
['2', 'Java', 'Python', 'Ruby', 'PHP', ['3', 'binghe', 'muma', 'Hi python']],
['2', 'Adam', 'Bart', 'Lisa', ['3', 'luhan', 'zhangxueyou', 'guofucheng', 'wangbaoqiang']]
]
①打印出Python:
list_1[2][2]
②打印出muma,luhan,并將他們添加到list_2:
list_2= list() 或 list_2=[]
list_2.extend([list_1[2][5][2],list_1[3][4][1]])