1. 程式人生 > 其它 >11 高階變數型別

11 高階變數型別

高階變數型別

學習內容

  • 列表
  • 元組
  • 字典
  • 字串
  • 公共方法
  • 變數高階

預備知識

  • 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.
    按下TAB鍵,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. 指定的區間屬於左閉右開型[開始索引,結束索引)
    • 從起始位開始,到結束位前一位結束(不包含結束位本身)
  2. 從頭開始,開始索引數字可以省略,冒號不能省略
  3. 到末尾結束,結束索引數字可以省略,冒號不能省略
  4. 步長預設為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("迴圈結束")

輸出結果:

不能夠達到我們的要求!