從零開始的python世界的闖蕩之視頻學習篇 第五話 字元串,列表,元組,字典
一.字元串
#存放數字的數據類型有整型和浮點型,假如我要存放字母,那麼就應該利用字元串類型去存儲#python中字元串的格式:# string_text = "存放的內容" ->簡單來說,就是用單引號或者雙引號將內容括起來,即為字元串#舉例: a = "python" -->此時變數a存放的是一個字元串類型的數據#字元串的輸出:# 利用%s 格式化輸出#舉例:
#字元串的輸入,利用input()輸入的都是字元串類型的數據#舉例:
#下標:就相當於是一個編號。在現實生活中,類似於超市的臨時儲物櫃#字元串在Python中相當於字元的數組,所以我們也可以通過下標索引去訪問字元串的指定位置上的值。#字元串在內存中的實際存儲如下:
#通過下標,取字元串的部分值#舉例:
#切片:切片是指對操作的對象截取其中一部分的操作。字元串、列表、元組都支持切片操作。 #很形象的可以用生活中切蛋糕來比喻。#切片的語法結構: 被切的值[開始:結束:步長]#需要注意的是:選取的區間為左閉右開型,即顧前不顧尾,取左邊的臨界值,不取右邊的臨界值。#接下來舉例說明:
#不僅如此,還支持負數,這就相當於倒過來輸出#下圖所示:
#面試題:#給定一個字元串aStr, 請反轉字元串#答案:old_string = "aStr"new_string = old_string[::-1]print(new_string)
二.字元串的常見操作
#為了方便舉例,先假設一個字元串 mystr = hello world itcast and itcastcpp##1.find(): 簡單格式為,mystr.find(str, start=起始, end=結束)# 功能,檢測str字元串是否在mystr指定的位置,如果在,返回第一個索引,不在返回-1#舉例:
#2.index():簡單格式,mystr.index(str, start=開始位置, end=結束位置) # 功能,與find()方法一樣,只不過當沒有找到的話,會拋出一個異常#舉例:
#3.count: 簡單格式,mystr.count(str, start=開始位置, end=結束位置))# 功能:返回str在指定位置內出現的次數#舉例:
#4.replace: 簡單格式,mystr.replace(str1, str2, mystr.count(str1))# 功能,將mystr中的str1 替換成str2.如果指定count,則替換count次,默認為1次#舉例:
#5.split:簡單格式:mystr.split(str=" ", 2) # 功能,以str為分隔符,將mystr進行切片成列表,最後2代表次數。默認為全部。#舉例:
#6.capitalize : 簡單格式,mystr.capitalize()# 功能,將字元串的第一個字母大寫#舉例:
#7.title : 簡單格式,mystr.title()# 功能,將字元串的每個單詞首字母大寫#舉例:
#8.startswith: 簡單格式,mystr.startswith(obj)# 功能,檢測字元串是否以obj,如果是則返回True,否返回False#舉例:
#9.endswith: 簡單格式,mystr.endswith(obj)# 功能,檢查字元串是否以obj結尾,如果是,返回True,不是,返回False#舉例:
#10.lower: 簡單格式,mystr.lower()# 功能,轉換mystr中所有大寫字元為小寫#舉例:
#11.upper : 簡單格式,mystr。upper()# 功能,轉換mystr中的小寫字母為大寫字母#舉例:
#12.ljust:簡單格式,mystr.ljust(width)# 功能,返回一個原字元串左對齊,用空格填充至width長度的新字元串#舉例:
#13.rjust : 簡單格式,mystr.rjust(width)# 功能,返回一個原字元串右對齊,用空格填充至width長度的新字元串#舉例:
#14.center : 簡單格式,mystr.center(width)# 功能,返回一個原字元串居中,並使用空格填充至width長度的新字元串#舉例:
#15.lstrip: 簡單格式,mystr.lstrip()# 功能,刪除mystr左邊的空白字元#舉例:
#16.rstrip: 簡單格式,mystr.rstrip()# 功能,刪除mystr右邊的空白字元#舉例:
#17.strip: 簡單格式,mystr.strip()# 功能,刪除mystr左右兩邊的空白字元#舉例:
#18.rfind : 簡單格式,mystr.rfind(str, start=開始位置,end=結束位置)# 功能,和find方法類似,只不過是從右邊開始找#舉例:
#19.rindex : 簡單格式,mystr.rindex( str, start=開始位置,end=結束位置)# 功能,和index()方法類型,不過是從右邊開始找#舉例:
#20.partition : 簡單格式,mystr.partition(str)# 功能,把mystr以str分割成三部分,str前,str 和 str後#舉例:
#21.rpartition :簡單格式,mystr.rpartition(str)# 功能,和partition類似,但是是從右邊開始找#舉例:
#22.splitlines : 簡單格式,mystr.splitlines()# 功能,按照行分隔,返回一個包含各行作為元素的列表#舉例:
#23.isalpha : 簡單格式: mystr.isalpha()# 功能,判斷如果mystr所有字元都是字母,則返回true.否則返回False#舉例:
#24.isdigit :簡單格式, mystr.isdigit()# 功能,如果mystr只包含數字,則返回True,否則返回False#舉例:
#25.isalnum :簡單格式,mystr.isalnum()# 功能,如果mystr所有字元都是字母或者數字則返回True,否則返回False#舉例:
#26. isspace: 簡單格式,mystr.isspace()# 功能,如果mystr中只包含空格,則返回True,否則返回False#舉例:
#27.join : 簡單格式,mystr.join(str)# 功能,在mystr中每個字元後面插入str,構造出一個新的字元串# 舉例:
#本小結的面試題,#給定一個字元串str,返回使用空格或者 分割後的倒數第二個子串#字元串為: str = "haha nihao a heihei woshi nide hao haopengyou"#答案:
三.列表
#列表:用來存放多個數據,可以是不同類型的數據,比如生活中的班級成員,就可以使用列表存放#列表的格式:# namelist = ["xiaoli","xiaowang","xiaozhao"]#簡單概括一下就是:用中括弧括起來,然後元素之間用逗號隔開,這種格式的就是列表。#列表的輸出#舉例:
#列表也支持切片和索引操作#舉例:
#列表支持循環遍歷#第一種是利用for循環進行遍歷#舉例:
#第二種是利用while循環進行遍歷#舉例:
#特別的,可以利用enumerate()方法,進行遍歷列表,他將返回的是索引和值#舉例:
#列表也是可以嵌套的。#舉例: address = [["南昌","撫州","景德鎮"],["深圳","廣州"],["南陽","鄭州"]]#假如咱們需要訪問南昌這個元素,應該寫成: address[0][0]#訪問廣州: address[1][1]#列表很容易讓人聯想成C語言中的數組。
四.列表的相關操作
#添加操作(涉及的方法有:append,extend,insert)#1. append() : 向列表末尾進行添加元素# 簡單格式為: list.append(所要添加的元素)#舉例:
#2.extend : 可以將另一個集合中的元素,逐一添加到列表中。# 簡單格式為: list1.extend(list2)# 需要特別注意的是:list2隻能是可迭代的數據類型,比如字元串,列表,元組等等#舉例:
#3.insert : 將元素添加到指定位置的前方。# 簡單格式為: list.insert(位置索引,所要添加的內容)#舉例:
#修改元素#沒有涉及到內置方法。修改元素是通過下標索引,直接進行修改,還可以利用切片,局部進行修改。#舉例:
#查找元素(in,not in, index(),count())#1. in : 這是一個標識符,如果指定的內容存在列表中。那麼結果為True,否則為False# #舉例:
#2. not in :這是由兩個標識符組合在一起的,如果指定的內容不存在列表中。那麼結果為Ture,否則# 為False#舉例:
#3. index() : 與字元串中的index用法一致,尋找指定的元素,找到則返回索引,未找到就拋出# 一個異常#舉例:
#4.count() : 與字元串中的count用法一致,在列表中尋找相同的指定元素,並記錄出現的次數。##舉例:
#刪除元素(del(),pop(),remove())#1.del() : 刪除指定位置的元素,也可以用來刪除整個列表##舉例:
#2.pop() : 刪除指定索引的列表元素,默認為末尾元素。##舉例:
#3.remove() : 刪除指定的元素,參數為元素值。##舉例:
#列表的排序(sort(),reverse())#1.sort() : 將列表按特定的順序重新排列,默認為由小到大,有個默認參數reverse,若設為True,則# 代表著倒序#舉例:
#2.reverse() : 是直接將列表進行倒序,沒有排序的功能。##舉例:
五.元組
#Python中的元組和列表很類似,只不過元組的元素是不能修改的。#基本格式 : tuple_text = ("py","thon")#一句話來說,元組就是利用小括弧括起來,元素之間用逗號隔開。#訪問元組,與訪問列表一樣,都支持索引和切片#舉例:
#注意的是,元組裡的元素是不允許修改的,但是,如果元組裡有可變類型的話,就另外說了。#此處的修改,包括了刪除。#舉例:
#元組中的內置函數#1.count() :與字元串和列表中的用法類似,都是用來統計指定元素值在元組中出現的次數## 舉例:
#2.index() : 同理,和字元串列表的用法類似,尋找指定元素值的位置,沒有找到拋出異常##舉例:
#元組 可以 說成是不可變的列表, 因此,元組的循環,嵌套與列表一樣。此處就不再重複了。
六.字典
#在python中有一個字典的數據類型,它與現實中的新華字典一樣的功能。新華字典中每一個漢字都對應#著一個頁碼。 咱們在python中,將漢字稱之為值(value),將頁碼稱之為鍵(Key),但是這個比喻不是#很嚴謹,咱們需要一個前提是,新華字典的一個頁碼只有一個漢字與其對應。#字典:是一個沒有順序的序列,元素以鍵值對的方式進行保存。 因此,沒有索引這個說法了。# 簡單的格式為: dict = {"鍵1":"值1","鍵2":"值2",...}#簡單來說,字典就是用大括弧括起來,元素是以鍵值對的方式,元素之間以逗號隔開,並且是個無序的#序列。特別的鍵在字典中是唯一的。#字典的調用值方法:#舉例:
#當需要測試去通過不知道是否存在的鍵獲取值的時候,避免拋出異常,可以通過get()方法#簡單格式 : dict_text.get("鍵名",如果不存在則設置默認的值)#舉例
#遍歷#目前,字元串,列表,元組遍歷都是利用for循環進行的#字典的遍歷也同樣是用for循環進行遍歷,只不過在設置遍歷對象時有所不同,分遍歷key,value,#以及同時遍歷#1.遍歷key#舉例:
#2.遍歷value#舉例:
#3.同時進行遍歷key和value#舉例:
七.字典的常用操作
#1.修改元素#字典的修改元素,沒有涉及方法。#類型與列表一樣,通過指定的鍵,然後直接修改。#舉例:
#2.添加元素#字典是可以直接指定一個鍵,進行添加值的。--》鍵和值作為一個元素添加進字典中。#假如鍵已經存在,那麼就相當於是修改元素的操作了。#舉例:
#3.刪除元素(del(),clear())##del() :是一個通用的刪除方法,既可以刪除指定的元素,也可以刪除變數(相當於刪除整個字典)#舉例:
#clear() : 是用來清空字典的一個方法。#舉例:
#4.len() : 測量字典中鍵值對的個數。##舉例:
#5.keys() : 返回一個包含字典中所有key的列表##舉例:
#6.values() :返回一個包含字典中所有value的列表##舉例:
#7.items() : 返回一個包含所有(鍵,值)元組的列表##舉例:
八.公共方法
#運算符對以上四種數據類型的使用程度,可以參照下表
#Python的內置函數,對前面4中數據類型,同樣的適用。
九.引用
#在python中,值都是靠引用來傳遞的。#何為引用。請看下面例子#舉例:
#首先 a = 1 此時 python解釋器在內存中,開闢了一個空間是用來存放值的,然後用變數a去指向這個#存放值的地址#看下圖:
#然後, b = a , 此時,python解釋器做的步驟是,只是用b這個變數去指向a變數指向的值。#看下圖
#此時,就應該明白了, a 和 b的 id為什麼會相同,因為他們指的是同一個值,是同一個位置上的東西#然後操作 a = 2時, 此時python解釋器又會做出如下的操作#
#開闢一個新的空間,讓a去指向這個值,此時a的id將會改變#如果是一個列表的話。
#其圖示如下:
#由引用,可以衍生出一個可變類型和不可變類型的知識點# 可變類型,是指值可以改變: 1.列表 list 2.字典 dict#不可變類型,是指值不可以改變: 1.數值類型: int float bool 2.字元串 str 3. 元組 tuple
十.篇末練習
#1. 編程實現對一個元素全為數字的列表,求最大值、最小值#答案: a = [1,4,66,7,2,3] print("最大值為:",max(a)) print("最小值為:",min(a))#2。編寫程序,完成以下要求: #統計字元串中,各個字元的個數 #比如:"hello world" 字元串統計的結果為: h:1 e:1 l:3 o:2 d:1 r:1 w:1#答案: str_text ="hello world" list = [] for i in str_text: if i not in list and not i.isspace(): print("%s:%d"%(i,str_text.count(i))) list.append(i)#3.編寫程序,完成以下要求: #完成一個路徑的組裝(在Linux系統下拼接路徑) #先提示用戶多次輸入路徑,最後顯示一個完成的路徑,比如/home/python/ftp/share#答案: list_text = [] while True: path = input("請輸入路徑,按次序輸入(退出請直接回車):") if path == "": break list_text.append(path) print("文件的路徑為:/%s"%(/.join(list_text))) #4. 編寫程序,完成「名片管理器」項目(利用所學的知識,還未學的知識不要用) 需要完成的基本功能: 添加名片 刪除名片 修改名片 顯示名片 退出系統 程序運行後,除非選擇退出系統,否則重複執行功能#答案:#-*- coding: utf-8 -*-humen_list = []while True: print("*"*30) print("歡迎進入名片管理系統 v1.1") print("1.添加名片") print("2.刪除名片") print("3.修改名片") print("4.顯示名片") print("5.退出系統") print("*"*30) num = int(input("請按選項進行操作:")) if num ==1 : #添加名片 new_dict = {} new_dict["name"] = input("請輸入姓名:") new_dict["age"] = input("請輸入年齡:") new_dict["address"] = input("請輸入公司地址:") humen_list.append(new_dict) print("添加完成!") elif num ==2 : #刪除名片 name = input("請輸入要刪除的名字:") for i in humen_list: if name == i["name"]: del(i) print("刪除成功!") else: print("查無此人,無法刪除!") elif num ==3 : #修改名片 name = input("請輸入舊名字:") for i in humen_list: if name == i["name"]: i["name"] = input("請輸入新的名字:") i["age"] = input("請輸入新的年齡:") i["address"] = input("請輸入新的公司地址:") print("修改成功!!") else: print("查無此人,修改失敗") elif num ==4 : #顯示名片 print("name age address ") for i in humen_list: for value in i.values(): print("%s "%(value),end=" ") print("") elif num ==5 : #退出程序 print("謝謝使用,再見!") break else: print("輸入有誤,請重新輸入")
推薦閱讀:
※Python3.6 Dtrace實戰
※Python網路編程中的伺服器架構(負載均衡、單線程、多線程和同步、非同步等)。
※Python 求職 Top10 城市,來看看是否有你所在的城市
※Jinja2動態生成周報