11 高階變數型別
阿新 • • 發佈:2022-03-02
高階變數型別
學習內容
- 列表
- 元組
- 字典
- 字串
- 公共方法
- 變數高階
預備知識
-
Python中資料型別可以分為數字型和非數字型
-
數字型
- 整型( int )
- 浮點型( float )
- 布林型( bool)
- 真True(非0 數)—―非零即真
- 假False 0
- 複數型(complex )
- 主要用於科學計算,例如:平面場問題、波動問題、電感電容等問題
-
非數字型
- 字元
- 列表
- 元組
- 字典
-
在Python中,所有非數字型變數都支援以下特點:
- 都是一個序列
sequence
,也可以理解為容器 - 取值
[]
- 遍歷
for in
- 計算長度、最大/最小值、比較、刪除
- 連結
+
和重複*
- 切片
- 都是一個序列
01.列表
1.1 列表的定義
List
(列表)是Python
中使用最頻繁的資料型別,在其他語言中通常叫做陣列- 專門用於儲存一串資訊
- 列表用
[]
定義,資料之間使用,
分隔 - 列表的索引從
0
開始- 索引就是資料在列表中的位置編號,索引又可以被稱為下標
注意:從列表中取值時,如果超出索引範圍,程式會報錯
name_list = ["zhangsan","lisi","wangwu"]
# 拿到資料 中括號!!!
# 中括號裡面的資料可以從0—2
name_list[0]
1.2 列表的常用操作
- 在
ipython3
中定義一個列表,例如:name_list=[]
- 輸入
name_list.
ipython
會提示列表能夠使用的方法如下:
In [1]: name_list.
name_list.append name_list.count name_list.insert name_list.reverse
name_list.clear name_list.extend name_list.pop name_list.sort
name_list.copy name_list.index name_list.remove
常用命令
name_list = ["zhangsan", "lisi", "wangwu"] # 1.取值和取索引 # list index out of range ;列表索引超出範圍 print(name_list[2]) # 知道資料的內容,想確定資料在列表中的位置 # 使用index方法需要注意,如果傳遞的資料不在列表中,程式會報錯! print(name_list.index("lisi")) # 2.修改 name_list[1] = "李四" # list assignment index out of range # 列表指定的索引超出範圍,程式會報錯 # name_list[3] = "王小二" # 3.增加 # append 方法可以向列表的末尾追加資料 name_list.append("王小二") # insert 方法可以在列表指定索引位置插入資料 name_list.insert(1, "小美眉") # extend 把另外一個列表的完整內容,追加到列表末尾 temp_list = ["孫悟空", "朱二哥", "沙師弟"] name_list.extend(temp_list) # 4.刪除 # remove 方法可以從列表中刪除制定的資料 name_list.remove("wangwu") # pop方法預設可以把列表最後一個元素刪除 name_list.pop() # pop方法可以指定要刪除元素的索引 name_list.pop(3) # clear 方法可以清空列表 name_list.clear() print(name_list)
del方法刪除
name_list = ["zhangsan", "lisi", "wangwu"]
# 使用del 關鍵字(delete)刪除列表元素
del name_list[1]
# del關鍵字本質上是用來將一個變數從記憶體中刪除的
# 提示:在日常開發中,要從列表刪除資料.建議使用列表提供的方法
name = "小明"
del name
# 注意:如果使用del關鍵字將變數從記憶體中刪除
# 後續的程式碼就不能再使用這個變量了
print(name_list)
列表的資料統計
name_list = ["張三", "李四", "王五","王小二","張三"]
# len(length 長度) 函式 可以統計列表中元素的總數
list_len=len(name_list)
print("列表中包含 %d 個元素" % list_len)
# count 方法可以統計列表中某一個數據出現的次數
count=name_list.count("張三")
print("張三出現 %d 次" % count)
# 從列表中刪除資料
# remove會刪除列表中第一次出現的資料,如果資料不存在,程式會報錯
name_list.remove("張三")
print(name_list)
列表的排序和翻轉
name_list = ["zhangsan", "lisi", "wangwu", "wangxiaoer"]
num_list = [6, 8, 4, 1, 10]
# 升 序
name_list.sort()
num_list.sort()
# 降 序
name_list.sort(reverse=True)
num_list.sort(reverse=True)
# 逆序
name_list.reverse()
num_list.reverse()
print(name_list)
print(num_list)
關鍵字、函式和方法(科普)
- 關鍵字是Python內建的、具有特殊意義的識別符號
In [1]: import keyword
In [2]: print(keyword.kwlist)
In [3]: print(len(keyword.kwlist))
關鍵字後面不需要使用括號
-
函式封裝了獨立功能,可以直接呼叫
函式名(引數)
函式需要死記硬背
- 方法和函式類似。同樣是封裝了獨立的功能
- 方法需要通過物件來呼叫,表示針對這個物件要做的操作
物件.方法名(引數)
在變數後面輸入
.
,然後選擇針對這個變數要執行的操作,記憶起來比函式要簡單很多
1.3 迴圈遍歷
- 遍歷就是從頭到尾依次從列表中獲取資料
- 在迴圈體內部針對每一個元素,執行相同的操作
- 在Python中為了提高列表的遍歷效率,專門提供的迭代 iteration遍歷
- 使用 for就能夠實現迭代遍歷
#fo r迴圈內部使用的變數 in 列表
for name in name_list:
#迴圈內部針對列表元素進行操作
print(name)
應用場景
- 儘管
Python
的列表中可以儲存不同型別的資料 - 但是在開發中,更多的應用場景是
- 1.列表儲存相同型別的資料
- 2.通過迭代遍歷,在迴圈體內部,針對列表中的每一項元素,執行相同的操作
02.元組
2.1 元組的定義
Tuple
(元組)與列表類似,不同之處在於元組的元素不能修改。- 元組表示多個元素組成的序列
- 元組在Python開發中,有特定的應用場景
- 用於儲存一串資訊,資料之間使用
,
分隔 - 元組用
()
定義 - 元組的索引從
0
開始- 索引就是資料在元組中的位置編號
info_tuple=("zhangsan",18,1.75)
索引時,不管是元組還是列表均用
[]
建立空元組
info_tuple=()
元組中只包含一個元素時,需要在元素後面新增逗號
info_tuple=(50,)
2.2 元組常用操作
- 在ipython3中定義一個元組。例如:
info = ()
- 輸入
info = ()
按下 TAB鍵,ipython會提示元組能夠使用的函式如下:
info.count info.index
2.3 迴圈遍歷
- 取值就是從元組中獲取儲存在指定位置的資料
- 遍歷就是從頭到尾依次從元組中獲取資料
#fo 迴圈內部使用的變數 in 元組
for name in info:
#迴圈內部針對元組元素進行操作
print(info)
- 在Python中,可以使用for迴圈遍歷所有非數字型型別的變數:列表、元組、字典以及字串
- 提示:在實際開發中,除非能夠確認元組中的資料型別,否則針對元組的迴圈遍歷需求並不是很多
info_tuple = ("zhangsan", 18, 1.75)
for my_info in info_tuple:
# 使用格式字串拼接my_info 這個變數不方便!
# #因為元組中通常儲存的資料型別是不同的!
print(my_info)
2.4 應用場景
- 儘管可以使用 for in 遍歷元組
- 但是在開發中,更多的應用場景是:
- 函式的引數和返回值,一個函式可以接收任意多個引數,或者一次返回多個數據
- 有關函式的引數和返回值,在後續函式高階給大家介紹
- 格式字串,格式化字串後面的
()
本質上就是一個元組。 - 讓列表不可以被修改。以保護資料安全
- 函式的引數和返回值,一個函式可以接收任意多個引數,或者一次返回多個數據
info_tuple=("小明",18,1.75)
# 格式字串,格式化字串後面的`()`本質上就是一個元組。
print("%s 年齡是 %d 身高是 %.2f" % ("小明",18,1.75))
print("%s 年齡是 %d 身高是 %.2f" % info_tuple)
# 可以用格式字串,拼接生一個新的字串
info_str = "%s 年齡是 %d 身高是 %.2f" % info_tuple
print(info_str)
元組和列表之間的轉換
-
使用
list
函式可以把元組轉換成列表list(元組)
-
使用
tuple
函式可以把列表轉換成元組tuple(列表)
03.字典
3.1 字典的定義
dictionary
(字典)是除列表以外Python
之中最靈活的資料型別- 字典同樣可以用來儲存多個數據
- 通常用於儲存描述一個
物體
的相關資訊
- 通常用於儲存描述一個
- 和列表的區別
- 列表是有序的物件集合。
- 字典是無序的物件集合
- 字典用
{}
定義 - 字典使用鍵值對儲存資料,鍵值對之間使用
,
分隔。- 鍵key是索引
- 值value是資料
- 鍵和值之間使用
:
分隔。 - 鍵必須是唯一的
- 值可以取任何資料型別,但鍵只能使用字串、數字或元組
xiaoming = {"name": "小明",
"age":18,
"gender":True,
"height":1.75,
"weight":75.5}
print(xiaoming)
3.2 字典常用操作
- 在
ipython3
中定義一個字典,例如:xiaoming = {}
- 輸入
xiaoming.
按下TAB
鍵,ipython
會提示字典能夠使用的函式如下:
字典的基本使用
xiaoming_dict = {"name": "小明"}
# 1.取值(還是中括號[])
# 在取值的時候,如果指定的key不存在,程式會報錯!
print(xiaoming_dict["name"])
# 2.增加/修改
# 如果key不存在,會新增鍵值對
# 如果key存在,會修改已經存在的鍵值對
xiaoming_dict["age"] = 18
xiaoming_dict["name"] = "小小明"
# 3.刪除
# 使用pop進行刪除,無remove
# 在刪除指定鍵值對的時候,如果指定的key不存在,程式會報錯!
xiaoming_dict.pop("name")
print(xiaoming_dict)
字典的其他操作
xiaoming_dict = {"name": "小明",
"age": 18}
# 1.統計鍵值對爰量
print(len(xiaoming_dict))
# 2.合併字典
temp_dict = {"height": 1.75}
xiaoming_dict.update(temp_dict)
# 注意:如果被合籌的字典中包含已經存在的鍵值對,會覆蓋原有的鍵值對
# 3.清空字典
xiaoming_dict.clear()
print(xiaoming_dict)
3.3 迴圈遍歷
xiaoming_dict={"name":"小明",
"qq":"123465",
"phone":"10086"}
#迭代遍歷字典
#變數k是每一次迴圈中,獲取到的鍵值對的key
for k in xiaoming_dict:
print("%s - %s" % (k,xiaoming_dict[k]))
3.4 應用場景
- 儘管可以使用 for in遍歷字典
- 但是在開發中。更多的應用場景是:
- 使用多個鍵值對,儲存描述一個
物體
的相關資訊--描述更復雜的資料資訊 - 將多個字典放在一個列表中,再進行遍歷,在迴圈體內部針對每一個字典進行相同的處理
- 使用多個鍵值對,儲存描述一個
card_list=[
{"name":"小明",
"qq":"123465",
"phone":"10086"},
{"name":"小",
"qq":"123465dd",
"phone":"10086dfdfds"}
]
for card_info in card_list:
print(card_info)
04.字串
4.1 字串定義
- 字串 就是一串字元,是程式語言語言中表示文字的資料型別
- 在Python中可以使用一對雙引號
“
或者**一對單引號 **‘
定義一個符串- 雖然可以使用
\"
或者\'
做字串的轉義,但是在實際開發中:- 如果字串內部需要使用
“
,可以使用‘
定義字串 - 如果字串內部需要使用
’
,可以使用”
定義字串
- 如果字串內部需要使用
- 雖然可以使用
- 可以使用索引獲取一個字串中指定位置的字元,索引計數從0開始
- 也可以使用
for
迴圈遍歷字串中每一個字元
str2='我的外號是"大西瓜"'
print(str1[6])
for char in str2:
print(char)
大多數程式語言都是用
“
來定義字串
4.2 字串的常用操作
hello_str = "hello hello"
# 1.統計字串長度
print(len(hello_str))
# 2.統計某一個小(子)字串出現的次數
print(hello_str.count("llo"))
print(hello_str.count("abc"))
# 3.某一個子字串出現的位置
print(hello_str.index("llo"))
# 注意:如果使用index方法傳遞的子字串不存在,程式會報錯!|
print(hello_str.index("abc"))
查詢字串的方法的個數:
- 在
ipython3
中定義一個字串,例如 :hello_str=""
- 輸入
hello_str.
按下Tab
鍵,ipython
會提示字串能夠使用的方法如下:
hello_str.capitalize hello_str.isidentifier hello_str.rindex
hello_str.casefold hello_str.islower hello_str.rjust
hello_str.center hello_str.isnumeric hello_str.rpartition
hello_str.count hello_str.isprintable hello_str.rsplit
hello_str.encode hello_str.isspace hello_str.rstrip
hello_str.endswith hello_str.istitle hello_str.split
hello_str.expandtabs hello_str.isupper hello_str.splitlines
hello_str.find hello_str.join hello_str.startswith
hello_str.format hello_str.ljust hello_str.strip
hello_str.format_map hello_str.lower hello_str.swapcase
hello_str.index hello_str.lstrip hello_str.title
hello_str.isalnum hello_str.maketrans hello_str.translate
hello_str.isalpha hello_str.partition hello_str.upper
hello_str.isdecimal hello_str.replace hello_str.zfill
hello_str.isdigit hello_str.rfind
提示:正是因為python內建提供的方法足夠多,才使得在開發時,能夠針對字串進行更加靈活的操作!應對更多的開發需求!
1) 判斷型別-9
# 1.判斷空白字元
space_str = " \t\n\r"
# \t\n\r均屬於空白字元
print(space_str.isspace())
# 1.判斷空白字元
space_str = " \t\n\r"
# \t\n\r均屬於空白字元
print(space_str.isspace())
# 2.判斷字串中是否只包含數字
# 1>都不能判斷小數
# num_str="1.1" False False False
# 2>unicode 字串
# num_str = "\u00b2" False True True
# 3>中文數字
num_str="一千零一夜" # False False True
print(num_str)
print(num_str.isdecimal())# 開發中儘量使用這個!!
print(num_str.isdigit())
print(num_str.isnumeric())
2)查詢和替換-7
3)大小寫轉換-5
4)文字對齊-3
5)去除空白字元-3
6)拆分和連線 -5
4.3 字串的切片
- 切片的方法適用於字串、列表、元組
- 切片使用索引值來限定範圍,從一個大的字串中切出小的字串
- 列表和元組都是有序的集合,都能夠通過索引值獲取到對應的資料
- 字典是一個無序的集合,是使用鍵值對儲存資料
字串[開始索引:結束索引:步長]
注意:
- 指定的區間屬於左閉右開型
[開始索引,結束索引)
- 從起始位開始,到結束位前一位結束(不包含結束位本身)
- 從頭開始,開始索引數字可以省略,冒號不能省略
- 到末尾結束,結束索引數字可以省略,冒號不能省略
- 步長預設為1,如果連續切片,數字和冒號都可以省略
索引的順序和倒序
- 在Python中不僅支援順序索引,同時還支援倒序索
- 引所謂倒序索引就是從右向左計算索引
- 最右邊的索引值是-1,依次遞減
面試題:字串逆序
>>> num_str="0123456789"num_str="0123456789"
>>> num_str[-1::-1]
'9876543210'
05.公共方法
5.1 Pyhton內建函式
Python包含了以下內建函式
注意:
-
字串比較符合以下規則:”0“<"A"<"a"
-
內建函式是不用import匯入
## del作為關鍵字刪除
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
## del作為函式刪除
>>> del(a[1])
>>> a
[1]
- 可以用比較運算子來判斷大小,但是字典不能比較大小
5.2 切片
- 切片使用索引值來限定範圍,從一個大的寧符串中切出小的寧符串
- 列表和元組都是有序的集合,都能夠通過索引值獲取到對應的資料
- 字典是一個無序的集合,是使用鍵值對儲存資料
5.3 運算子
注意:
-
字典中的鍵值對的”key“都是唯一的,不可以用
*
-
+
號是產生一個新的資料,而extend
是將原來的資料進行擴充套件和修改不返回新的 -
append與extend的區別
- append會將元素打散一個個插入
- extend是將其看成一個整體直接全部插入
- in在對字典操作時,判斷的是字典的鍵(key)
- in和not in被稱為成員運算子
5.4 完整的for迴圈
- 在python中完整的for迴圈的語法如下:
for 變數 in 集合:
迴圈體程式碼
else:
沒有通過break退出迴圈,迴圈結束後,會執行的程式碼
應用場景
- 在迭代遍歷巢狀的資料型別時,例如一個列表包含了多個字典
- 需求:要判斷某一個字典中是否存在指定的值
- 如果存在,提示並且退出迴圈
- 如果不存在,在迴圈整體結束後,希望得到一個統一的提示
students =[
{"name":"阿土"},
{"name":"小美"}
]
find_name="張三"
for stu_dict in students:
print(stu_dict)
if stu_dict["name"]==find_name:
print("找到了 %s" % stu_dict["name"])
break
else:
print("抱歉沒有找到 %s" % find_name)
print("迴圈結束")
輸出結果:
錯誤示範,將else改到if下:
students =[
{"name":"阿土"},
{"name":"小美"}
]
find_name="張三"
for stu_dict in students:
print(stu_dict)
if stu_dict["name"]==find_name:
print("找到了 %s" % stu_dict["name"])
break
else:
print("抱歉沒有找到 %s" % find_name)
print("迴圈結束")
輸出結果:
不能夠達到我們的要求!