主頁 >  其他 > 2021-09-24——大資料學習日志——Python——容器型別(附練習題)

2021-09-24——大資料學習日志——Python——容器型別(附練習題)

2021-09-26 12:20:33 其他

學習目標:

  • 能夠說出常用 Python 容器型別的名字:串列、元組、字典、字串、集合
  • 掌握容器型別的基本操作:定義和使用、增刪改查、遍歷等

01_串列

學習目標:

  • 知道定義串列的基本格式
  • 知道串列的常用操作:增刪改查
  • 能夠使用 for 回圈實作對串列中所有元素的遍歷

1.1 串列的定義

  • list(串列) 是 Python 中使用 最頻繁 的資料型別
  • 專門用于存盤 一組資料,存盤的每個資料 稱為 元素
  • 串列用 [] 定義,元素 之間使用 , 分隔
  • 串列的 索引(下標)0 開始
    • 索引(下標) 就是元素在 串列 中的位置編號

"""
串列定義的格式:
串列變數的名字 = [元素1, 元素2, ……]

使用格式:
    串列變數[下標]
"""

# 串列定義
name_list = ['mike', 'yoyo', 'rock', 'lily']
#              0       1        2       3
#             -4       -3      -2       -1

# 最后一個元素取出來
print(name_list[3])
print(name_list[-1])

# 訪問串列元素,不要超出范圍,不要越界
# IndexError: list index out of range
# print(name_list[4])
  • 注意:從串列中取值時,如果 超出索引(下標)范圍,程式會報錯

1.2 串列嵌套

  • 一個串列中的元素又是串列,那么這就是串列的嵌套
school_list = [['北京大學', '清華大學'], ['中山大學', '華南理工大學'], ['哈工大', '哈工程']]
#                  0                      1                         2

# 取出第 2 個元素,也就是下標為 1 的元素
print(school_list[1])  # ['中山大學', '華南理工大學']

# 先取出下標為 1 的元素,再繼續取下標為 1 的元素
# ['中山大學', '華南理工大學']
#   0            1
print(school_list[1][1])  # '華南理工大學'

1.3 串列常用操作

分類關鍵字 / 函式 / 方法說明舉例
增加串列.append(值)在末尾追加資料
list1 = [13, 5]

# 在串列結尾追加8
list1.append(8)
print(list1)  # [13, 5, 8]
洗掉串列.remove(值)洗掉第一個出現的指定資料
list1 = [13, 5, 8, 5]

# 洗掉第一個匹配到的5
list1.remove(5)
print(list1)  # [13, 8, 5]
修改串列[索引] = 值修改指定索引的資料,資料不存在會報錯
list1 = [13, 5]

# 修改 索引1 對應的值
list1[1] = 2
print(list1)  # [13, 2]

list1[10] = 3  # 索引不存在,程式報錯
查詢串列[索引]根據索引取值,索引不存在會報錯
list1 = [13, 5, 8]

# 獲取索引1 對應的值
print(list1[1])  # 5

print(list1[10])  # 索引不存在,程式報錯
len(串列)串列長度(元素個數)
list1 = [13, 5, 8]

# 獲取串列中元素的個數
length = len(list1)
print(length)  # 3
值 in 串列判斷串列中是否包含某個值,結果是 True 或 False
list1 = [13, 5, 8]
# 判斷串列中是否包含資料5
if 5 in list1:  # 包含資料,回傳True; 不包含,回傳False
    print("串列中包含該資料")  
else:  
    print("串列中不包含該資料")
# 輸出:  串列中包含該資料
排序串列.sort()升序排序
list1 = [13, 5, 8]
# 升序排列
list1.sort()
print(list1)  # [5, 8, 13]
# 降序排列
list1.sort(reverse=True)
print(list1)  # [13, 8, 5]

1.4 回圈遍歷

1.4.1 通過for回圈遍歷

  • 遍歷 就是 從頭到尾 依次串列 中取出 每一個元素
  • Python中專門提供 for回圈 實作遍歷
# 遍歷,從頭開始找,直到結束
name_list = ['mike', 'yoyo', 'rock', 'lily']

# 通過while實作遍歷
# 1. 定義條件變數i = 0
i = 0

# 2. while i < 串列元素個數:
while i < len(name_list):
    # 3. 取出某個元素,列印
    name = name_list[i]
    print(name)

    # 4. 條件變數的修改
    i += 1

print('==========華麗分割線=============')

# for遍歷回圈,和上面的while效果等價
# 從頭到尾 依次從 串列 中取出 每一個元素
for name in name_list:
    print(name)

1.4.2 if…in 和 for…in 的區別

  • if…in:判斷某個元素是否在串列中,如果在,if的條件為True
  • for…in:從頭到尾 依次從 串列 中取出 每一個元素
name_list = ['mike', 'yoyo', 'rock', 'lily']

# if…in:判斷某個元素是否在串列中,如果在,if的條件為True
name = 'yoyo'

# name的內容'yoyo'是否在name_list串列中,如果在,name in name_list結果為True
if name in name_list:
    print('%s 在串列中' % name)

print('==========華麗分割線=============')

# for…in:從頭到尾 依次從 串列 中取出 每一個元素,這個元素給name賦值
for name in name_list:
    print(name)

運行結果:

yoyo 在串列中
==========華麗分割線=============
mike
yoyo
rock
lily

1.4.3 for…else的使用

  • for回圈里面沒有遇到break陳述句,for執行完后,則會執行else的分支
name_list = ['mike', 'yoyo', 'rock', 'lily']

for name in name_list:
    print(name)

    # 測驗有break,和沒有break的else執行情況
    # if name == 'yoyo':
    #     break
else:
    print('for回圈里面沒有遇到break陳述句,for執行完后,則會執行else的分支')

運行結果:

mike
yoyo
rock
lily
for回圈里面沒有遇到break陳述句,for執行完后,則會執行else的分支

02_元組

學習目標:

  • 知道定義元組的基本格式
  • 知道元組和串列的區別

2.1 元組的定義

  • 元組用 () 定義
  • 也用于存盤 一組 資料元素 之間使用 , 分隔
  • 元組的 索引(下標)0 開始
# 串列:串列變數 = [元素1, 元素2, ……]
# 元組:元組變數 = (元素1, 元素2, ……)
my_tuple = ('mike', 'yoyo', 'lily')
#             0       1        2

# 取出第0個元素
print(my_tuple[0])  # 輸出:'mike'
  • 元組中 只包含一個元素 時,需要 在元素后面添加逗號
# 元組只有一個元素的時候,格式: (元素,)
my_tuple1 = (250,)
# 列印my_tuple1的型別
print(type(my_tuple1))

2.2 元組常用操作

  • tuple(元組)與串列類似,不同之處在于元組的 元素不能修改
my_tuple = ('mike', 'yoyo', 'lily')
# 元組只讀不能改
# TypeError: 'tuple' object does not support item assignment
# my_tuple[0] = 'rock' # err
分類關鍵字 / 函式 / 方法說明舉例
查詢元組[索引]根據索引取值,索引不存在會報錯
tuple1 = (13, 5, 8)
# 獲取索引1 對應的值
print(tuple1[1])  # 5
print(tuple1[10])  # 索引不存在,程式報錯
len(元組)元組長度(元素個數)
tuple1 = (13, 5, 8)
# 獲取元組中元素的個數
length = len(tuple1)
print(length)  # 3
值 in 元組判斷元組中是否包含某個值
tuple1 = (13, 5, 8)
# 判斷元組中是否包含資料5
if 5 in tuple1:  # 包含資料,回傳True; 不包含,回傳False
    print("元組中包含該資料")  
else:  
    print("元組中不包含該資料")
# 輸出:  元組中包含該資料

03_字典

學習目標:

  • 知道定義字典的基本格式
  • 知道字典的常用操作:增刪改查
  • 能夠通過for回圈完成對字典的遍歷

3.1 字典的定義

  • 字典同樣可以用來 存盤多個資料
    • 通常用于存盤 描述一個 物體 的相關資訊
  • 字典用 {} 定義
  • 字典使用 鍵值對 存盤資料,鍵值對之間使用 , 分隔
    • key 是索引, value 是資料
    • 之間使用 : 分隔
    • 可以取任何資料型別,但 只能使用 字串數字元組
    • 鍵必須是唯一的

"""
字典定義格式:
    字典變數 = {k1:v1, k2:v2,……}

取出元素的值:
    字典變數[鍵值]
"""
# 字典的定義
info = {'name': 'mike', 'age': 34, 'city': 'sz'}
print(info)  # {'name': 'mike', 'age': 34, 'city': 'sz'}

# 取出元素的值:字典變數[鍵值]
print(info['city'])

3.2 字典常用操作

分類關鍵字 / 函式 / 方法說明舉例
增加字典[鍵] = 值鍵不存在,會添加鍵值對
dict1 = {"name": "張三"}

# 給字典添加鍵值對
dict1["age"] = 20
print(dict1)  # {"name": "張三", "age": 20}
洗掉字典.pop(鍵)洗掉指定鍵值對,回傳被洗掉的值,如果鍵不存在,會報錯
dict1 = {"name": "張三", "age": 20}

# 洗掉鍵值對
value = dict1.pop("age")
print(dict1) # {"name": "張三"}
print(value) # 20

# 鍵不存在, 會報錯
dict1.pop("height")
修改字典[鍵] = 值鍵存在,會修改鍵值對的值
dict1 = {"name": "張三"}
# 給字典添加鍵值對
dict1["name"] = "李四"
print(dict1)  # {"name": "李四"}
查詢字典[鍵]根據鍵取值,鍵值對不存在會報錯
list1 = [13, 5]
dict1 = {"name": "張三"}
# 獲取鍵值對的值
print(dict1["name"])  # "張三"
# 鍵不存在, 會報錯
print(dict1["height"])
字典.get(鍵)根據鍵取值,鍵值對不存在回傳None, 不會報錯
dict1 = {"name": "張三"}
# 獲取鍵值對的值
print(dict1["name"])  # "張三"
# 鍵不存在, 回傳None
print(dict1.get('height'))  # None
遍歷for key, value in 字典.items()遍歷字典, 獲取所有的鍵值對 (鍵, 值)
dict1 = {"name": "張三", "age": 20}
# 遍歷字典所有的鍵值對
for key, value in dict1.items():
    print(key, value)
# 輸出: 
#            "name", "張三"  
#            "age", 20

3.3 案例:登錄注冊系統

  • 在開發中,字典的應用場景是:

    • 使用 多個鍵值對,存盤 描述一個 物體 的相關資訊 —— 描述更復雜的資料資訊

    • 多個字典 放在 一個串列 中,再進行遍歷,在回圈體內部針對每一個字典進行 相同的處理

      用戶1: {'name': 'mike', 'pwd': '123456'}
      用戶2: {'name': 'yoyo', 'pwd': '123456'}
      
      用戶管理串列:
      user_list = [{'name': 'mike', 'pwd': '123456'}, {'name': 'yoyo', 'pwd': '123456'}]
      
  • 登錄注冊系統需求:完成用戶注冊、用戶登錄功能

"""
登錄注冊系統需求:1.用戶注冊/ 2.用戶登錄/ 3.退出程式

0. 定義一個串列,用于存盤用戶字典

1. 死回圈 while True:
    2. 輸入數字指令
    3. 判斷指令,選擇分支
    4. 用戶注冊功能
        4.1 輸入注冊的用戶名
        4.2 通過for遍歷串列,取出的每個元素是字典
            4.3 字典['name']和輸入注冊的用戶名比較是否相等
                4.4 如果相等,列印提示:名字在串列中,不允許注冊
                4.5 跳出回圈
        4.6 for回圈的else,回圈里面沒有執行到break,則會執行else
            4.7 輸入注冊的密碼
            4.8 創建一個字典
            4.9 字典追加到串列中
            4.10 列印:注冊成功
    5. 用戶登陸功能
        5.1 輸入登陸的用戶名和密碼
        5.2 通過for遍歷串列,取出的每個元素是字典
            5.3 字典['name']和登陸用戶名比較 and 字典['pwd']和登陸密碼比較
                5.4 如果都相等,列印提示:登陸成功
                5.5 跳出回圈
        5.6 for回圈的else,回圈里面沒有執行到break,則會執行else
            5.7 列印:用戶名或密碼錯誤,請重新登陸
"""
# 0. 定義一個串列,用于存盤用戶字典
user_list = [{'name': 'mike', 'pwd': '123456'}, {'name': 'yoyo', 'pwd': '123456'}]

# 1. 死回圈 while True:
while True:
    #  2. 輸入數字指令
    cmd_num = input('請輸入操作: 1.用戶注冊/ 2.用戶登錄/ 3.退出程式')

    # 3. 判斷指令,選擇分支
    # 4. 用戶注冊功能
    if cmd_num == '1':
        # print('用戶注冊')
        # 4.1 輸入注冊的用戶名
        reg_name = input('請輸入注冊的名字:')
        # 4.2 通過for遍歷串列,取出的每個元素是字典
        for user_dict in user_list:
            # 4.3 字典['name']和輸入注冊的用戶名比較是否相等
            if user_dict['name'] == reg_name:
                # 4.4 如果相等,列印提示:名字在串列中,不允許注冊
                print(reg_name, '名字在串列中,不允許注冊')
                # 4.5 跳出回圈
                break
        # 4.6 for回圈的else,回圈里面沒有執行到break,則會執行else
        else:
            # 4.7 輸入注冊的密碼
            reg_pwd = input('請輸入注冊的密碼:')
            # 4.8 創建一個字典
            user_dict = {'name': reg_name, 'pwd': reg_pwd}
            # 4.9 字典追加到串列中
            user_list.append(user_dict)
            # 4.10 列印:注冊成功
            print('注冊成功')
    # 5. 用戶登陸功能
    elif cmd_num == '2':
        # print('用戶登錄')
        # 5.1 輸入登陸的用戶名和密碼
        login_name = input('請輸入登錄用戶名:')
        login_pwd = input('請輸入登錄密碼:')
        # 5.2 通過for遍歷串列,取出的每個元素是字典
        for user_dict in user_list:
            # 5.3 字典['name']和登陸用戶名比較 and 字典['pwd']和登陸密碼比較
            if user_dict['name'] == login_name and user_dict['pwd'] == login_pwd:
                # 5.4 如果都相等,列印提示:登陸成功
                print('登陸成功')
                # 5.5 跳出回圈
                break
        # 5.6 for回圈的else,回圈里面沒有執行到break,則會執行else
        else:
            # 5.7 列印:用戶名或密碼錯誤,請重新登陸
            print('用戶名或密碼錯誤,請重新登陸')
    elif cmd_num == '3':
        print('退出程式')
        break
    else:
        print("輸入錯誤,重新輸入")

04_字串

學習目標:

  • 能夠使用兩個單引號、雙引號、三引號定義字串
  • 知道字串的常用操作:查找、替換等
  • 能夠使用切片語法獲取字串指定區間內的子串

4.1 字串的定義

  • 字串 就是 一串字符,是編程語言中用來存盤文本的資料型別
  • 在 Python 中可以使用 一對雙引號 " 或者 一對單引號 ' 定義一個字串 或者 一對三引號 ''' 定義一個字串

  • 可以使用 索引 獲取一個字串中 指定位置的字符,索引計數從 0 開始

  • 也可以使用 for 回圈遍歷 字串中每一個字符
"""
字串變數 = '字串內容'
說明:可以是單引號、雙引號、三引號

"""
my_str = 'python'
#         012345

# 取某個元素,和串列一樣
print(my_str[0])

# 遍歷取所有元素
for c in my_str:
    print(c)

4.2 f-strings 字串格式化

  • f-strings是Python 3.6之后的一種新的字串格式化方法,要使用f-strings,只需在字串前加上f、或F:
name = 'mike'
age = 34
sex = 'male'

# 傳統方式格式化
print('我叫%s, 年齡為%d, 性別為:%s' % (name, age, sex))

# 和上面列印效果一樣
print(f'我叫{name}, 年齡為{age}, 性別為:{sex}')
print(F'我叫{name}, 年齡為{age}, 性別為:{sex}')

4.3 字串的常用操作

分類關鍵字 / 函式 / 方法說明舉例
查找字串.find(目標字串, 開始索引, 結束索引)在指定范圍內, 查詢目標字串的索引, 不存在回傳-1
str1 = "hello python"

# 查找"py"對應的索引(能找到的話, 回傳"p"對應的索引)
index = str1.find("py")
print(index)  # 6

# 查找"88"對應的索引, 不存在, 回傳-1
index = str1.find("88")
print(index)  # -1
替換字串.replace(原內容, 新內容, 替換次數)回傳一個替換了原內容的新字串,可以指定替換次數
str1 = "hello python"

# 對內容進行替換, 回傳新字串
new_str = str1.replace("py", "Py")
print(new_str)  # hello Python
分割字串.split(分割符)以分割符拆分字串, 回傳串列
str1 = "hello python hello world"

# 以空格分割字串,每段一個元素,回傳串列
str_list = str1.split(" ")
print(str_list)  # ["hello", "python", "hello", "world"]
拼接字串 + 字串拼接兩個字串
str1 = "hello"

str2 = "python"

# 拼接字串
str3 = str1 + str2
print(str3)  # "hellopython"
字串.join(字串串列)以字串來連接字串串列中每個元素,合并為一個新的字串
str1 = ","

name_list = ["beijing", "shenzhen", "shanghai", "guangzhou"]

# 以字串為連接符拼接字串串列的元素,生成新的字串
str2 = str1.join(name_list)
print(str2)  # "beijing,shenzhen,shanghai,guangzhou"

4.4 字串的切片

4.4.1 切片介紹

  • 切片 譯自英文單詞 slice,翻譯成另一個解釋更好理解: 一部分

  • 切片 使用 索引值 來限定范圍,根據 步長 從原序列中 取出一部分 元素組成新序列

  • 切片 方法適用于 字串串列元組

    字串[開始索引:結束索引:步長]

注意

  1. 指定的區間屬于 左閉右開[開始索引, 結束索引) 對應 開始索引 <= 范圍 < 結束索引
    • 起始 位開始,到 結束位的前一位 結束(不包含結束位本身)
  2. 從頭開始,開始索引 數字可以省略,冒號不能省略
  3. 到末尾結束,結束索引 數字和冒號都可以省略
  4. 步長:理解為走的步數,正數說明是從左往右,負數是從右往左,默認步長為+1
    • 步長默認為 1,如果元素連續,數字和冒號都可以省略

4.4.2 案例

演練需求

  • 截取從 2 ~ 5 位置 的字串
  • 截取從 2 ~ 末尾 的字串
  • 截取從 開始 ~ 5 位置 的字串
  • 從開始位置,每隔一個字符截取字串
  • 截取字串末尾兩個字符
  • 字串的逆序(面試題)

示例代碼:

"""
字串[開始索引:結束索引:步長]
0. 步長默認為1,步長理解為走幾步,正數從左往右,負數從右往左
1. 字串[開始索引:結束索引]   開始索引 ~(結束索引-1)
2. 字串[開始索引: ]       開始索引 ~ 結束索引,末尾索引不寫,默認能取到末尾那個索引
3. 字串[ :結束索引]       0 ~(結束索引-1),開始索引不寫,默認從第0個元素開始
"""
temp_str = '12345678'
#           01234567
#                -2-1

# 站在用戶角度,第1個元素才開始算第1個位置
# 截取從 2 ~ 5 位置 的字串
print(temp_str[1:5])

# 截取從 2 ~ 末尾 的字串
print(temp_str[1:]) # 沒有指定結尾索引,默認取到末尾

# 截取從 開始 ~ 5 位置 的字串
print(temp_str[:5]) # 沒有指定開頭索引,默認從0開始

# 從開始位置,每隔一個字符截取字串,也就是說走2步
print(temp_str[::2]) # 沒有指定開頭、結尾索引,默認從頭到尾

# 截取字串末尾兩個字符
print(temp_str[-2:])  # 沒有指定結尾索引,默認取到末尾

# 字串的逆序(面試題)
print(temp_str[::-1])

05_集合

學習目標:

  • 能夠通過集合完成對串列中元素的去重功能
  • 知道list、tuple、set之間可以進行型別轉換

5.1 通過集合完成對串列去重功能

  • 集合用 {} 定義,元素 之間使用 , 分隔
  • 可通過集合對串列中的元素完成去重功能
# 集合:元素不會重復,{元素1,元素2……}
# 定義集合
my_set = {1, 2, 1, 2, 1, 2}
print(my_set)  # {1, 2}
print(type(my_set))  # <class 'set'>

# 通過集合完成對串列去重功能
name_list = ['mike', 'yoyo', 'mike']
# set(name_list):給串列轉換為set型別,即可完成去重功能
temp_set = set(name_list)
print(temp_set)  # {'mike', 'yoyo'}

5.2 list、tuple、set之間型別轉換

函式說明
list(x)將 x 轉換為串列型別
tuple(x)將 x 轉換為元組型別
set(x)將 x 轉換為集合型別

示例代碼:

# 串列轉元組、集合 型別
my_list = [1, 2, 3, 5, 3, 5]

# 串列轉換為元組型別
my_tuple = tuple(my_list)
print(my_tuple)  # (1, 2, 3, 5, 3, 5)

# 串列轉換為集合型別
my_set = set(my_list)
print(my_set)   # {1, 2, 3, 5}

print('============華麗分割線============')

# 元組轉串列、集合 型別
my_tuple = (1, 2, 3, 5, 3, 5)

# 元組轉換為串列 型別
my_list = list(my_tuple)
print(my_list)  # [1, 2, 3, 5, 3, 5]

# 元組轉換為集合 型別
my_set = set(my_tuple)
print(my_set)   # {1, 2, 3, 5}

print('============華麗分割線============')

# 集合轉元組、串列 型別
my_set = {1, 2, 3}

# 集合轉換為串列 型別
my_list = list(my_set)
print(my_list)  # [1, 2, 3]

# 集合轉換為元組 型別
my_tuple = tuple(my_set)
print(my_tuple)  # (1, 2, 3)

06_公共語法

學習目標:

  • 知道公共語法為大部分容器型別的通用方法

6.1 Python 內置函式

Python 包含了以下內置函式:

函式描述備注
len(item)計算容器中元素個數
max(item)回傳容器中元素最大值如果是字典,只針對 key 比較
min(item)回傳容器中元素最小值如果是字典,只針對 key 比較

6.2 切片

描述Python 運算式結果支持的資料型別
切片[1, 2, 3, 4][::2][1, 3]字串、串列、元組

6.3 運算子

運算子Python 運算式結果描述支持的資料型別
+[1, 2] + [3, 4][1, 2, 3, 4]合并字串、串列、元組
*[1, 2] * 2[1, 2, 1, 2]重復字串、串列、元組
in3 in (1, 2, 3)True元素是否存在字串、串列、元組、字典
not in4 not in (1, 2, 3)True元素是否不存在字串、串列、元組、字典
> >= == < <=(1, 2, 6) < (1, 3, 4)True元素比較字串、串列、元組

注意

  • in 在對 字典 操作時,判斷的是 字典的鍵
  • innot in 被稱為 成員運算子

07_容器常用方法匯總

學習目標:

  • 了解容器常用方法,現用現查,當做手冊用

7.1 串列操作

分類關鍵字 / 函式 / 方法說明
增加串列.append(值)在末尾追加值
串列.insert(索引, 值)在指定位置插入值, 超過索引會追加值
串列.extend(可迭代物件)將可迭代物件 中 的元素 追加到串列
洗掉串列.remove(值)洗掉指定值的 第一個匹配項
del 串列[索引]洗掉指定位置的值
串列.pop(索引)洗掉指定索引的值, 并回傳被洗掉的值
串列.clear()清空串列
修改串列[索引] = 值修改指定索引的值,索引不存在會報錯
查詢串列[索引]根據索引取值,索引不存在會報錯
len(串列)串列長度(元素個數)
if 值 in 串列:判斷串列中是否包含某個值
串列.index(值)根據值查詢索引,回傳 第一個匹配項 的索引,沒有查到會報錯
串列.count(值)值在串列中出現的次數
排序串列.sort()排序
串列.reverse()逆序、反轉

7.2 元祖操作

分類關鍵字 / 函式 / 方法說明
查詢元組[索引]根據索引取值,索引不存在會報錯
len(元組)元組長度(元素個數)
if 值 in 元組:判斷元組中是否包含某個值
元組.index(值)根據值查詢索引,回傳 第一個匹配項 的索引,沒有查到會報錯
元組.count(值)值在元組中出現的次數

7.3 字典操作

分類關鍵字 / 函式 / 方法說明
增加字典[鍵] = 值鍵不存在,會添加鍵值對
洗掉字典.pop(鍵)根據鍵洗掉鍵值對,回傳被洗掉的值
del 字典[鍵]根據鍵洗掉鍵值對
字典.clear()清空字典
修改字典[鍵] = 值鍵存在,會修改鍵值對的值
字典.update(字典2)取出字典2的鍵值對對字典1操作,鍵值對不存在,添加鍵值對;存在則修改值
字典.setdefault(鍵,資料)鍵值對不存在,添加鍵值對;存在則不做處理
查詢字典[鍵]根據鍵取值,鍵值對不存在會報錯
字典.get(鍵)根據鍵取值,鍵值對不存在回傳None, 不會報錯
for key in 字典遍歷字典, 獲取所有的鍵
for key in 字典.keys()遍歷字典, 獲取所有的鍵
for value in 字典.values()遍歷字典, 獲取所有的值
for item in 字典.items()遍歷字典, 獲取所有的鍵值對 (鍵, 值)

7.4 字串操作

分類關鍵字 / 函式 / 方法說明
分割字串.split(分割符)以分割符拆分字串, 回傳串列
字串.partition(分割符)回傳元組,把字串分成一個 3 元素的元組 (分割符前面, 分割符, 分割符后面)
拼接字串 + 字串拼接兩個字串
字串.join(字串串列)以字串來連接字串串列中每個元素,合并為一個新的字串
替換字串.replace(原內容, 新內容, 替換次數)回傳一個替換了原內容的新字串,可以指定替換次數
查詢字串.find(目標字串, 開始索引, 結束索引)在指定范圍內, 查詢目標字串的索引, 不存在回傳-1
字串.rfind(目標字串, 開始索引, 結束索引)在指定范圍內, 查詢目標字串的索引, 不存在回傳-1, 從結尾處開始查找
字串.index(目標字串, 開始索引, 結束索引)在指定范圍內, 查詢目標字串的索引, 不存在會報錯
判斷字串.isalpha()如果 string 至少有一個字符并且所有字符都是字母則回傳 True
字串.isdecimal()如果 string 只包含數字則回傳 True
字串.islower()如果 string 中包含至少一個區分大小寫的字符,并且所有這些(區分大小寫的)字符都是小寫,則回傳 True
字串.isupper()如果 string 中包含至少一個區分大小寫的字符,并且所有這些(區分大小寫的)字符都是大寫,則回傳 True
字串.startswith(目標字串)檢查字串是否是以 目標字串 開頭,是則回傳 True
字串.endswith(目標字串)檢查字串是否是以 目標字串 結尾,是則回傳 True
大小寫轉換字串.lower()回傳新字串,轉換 字串 中所有大寫字符為小寫
字串.upper()回傳新字串,轉換 字串 中所有大寫字符為大寫
文本對齊字串.center()按照指定寬度回傳新字串,并基于原字串居中,可設定兩端空白位置的填充字符
字串.ljust()按照指定寬度回傳新字串,并基于原字串左對齊,可設定兩端空白位置的填充字符
字串.rjust()按照指定寬度回傳新字串,并基于原字串右對齊,可設定兩端空白位置的填充字符
去除兩端字符字串.strip(目標字串)回傳新字串,去除 字串 左右兩邊的目標字串, 不設定目標字串則去除空格
字串.lstrip(目標字串)回傳新字串,去除 字串 左邊的目標字串, 不設定目標字串則去除空格
字串.rstrip(目標字串)回傳新字串,去除 字串 右邊的目標字串, 不設定目標字串則去除空格

容器型別——附練習題

能力目標:

  • 能夠說出定義串列的基本格式
  • 能夠使用for回圈實作對串列中所有元素的遍歷
  • 知道in/not in能夠判斷串列中是否存在某個元素
  • 能夠說出定義元組的基本格式
  • 能夠說出定義字典的基本格式
  • 能夠通過鍵對字典進行添加/修改元素操作
  • 能夠使用兩個單引號、雙引號、三引號定義字串
  • 知道replace方法能夠實作替換指定子串

關卡一:基礎題

1. 寫出 for 回圈遍歷串列的完整格式,并簡單描述 for 回圈的執行程序

答案

格式如下:
    for 臨時變數 in 串列變數
        回圈執行的代碼
執行程序:
首先從被遍歷的資料里取出一個元素,并賦值給臨時變數
在回圈里可以直接使用臨時變數的值
當回圈里的代碼執行結束,會再次回到 for 回圈起始的位置,取出一個元素賦值給臨時變數,并開始回圈
直到回圈已經無法再次取出元素,才會結束回圈,然后開始執行回圈后的代碼

2. 簡述你對串列的理解(存什么樣的資料?什么是元素?串列如何定義?什么是索引?)

答案

list(串列) 是python中使用最頻繁的資料型別
專門用于存盤一串資料,存盤的資料稱為元素
串列用[]定義,元素之間用 , 分隔
串列的索引從 0 開始
索引就是元素在串列中的位置編號

3. 簡述你對元組的理解(存什么樣的資料?與串列的區別是什么?)

答案

元組用 () 定義
用于存盤一串資料,元素之間使用,分隔
元組的 索引 從 0 開始
Tuple(元組)與串列類似,不同之處在于元組的 元素不能修改

4. 簡述你對字典的理解(存什么樣的資料?字典如何定義?)

答案

字典同樣可以用來 存盤多個資料
通常用于存盤 描述一個 物體 的相關資訊
字典用 {} 定義
字典使用 鍵值對 存盤資料,鍵值對之間使用 , 分隔
  鍵 key 是索引
  值 value 是資料
  鍵 和 值 之間使用 : 分隔
  值 可以取任何資料型別,但 鍵 只能使用 字串、數字或 元組
  鍵必須是唯一的

5. 解釋什么是索引越界

答案

索引越界是指串列的下標超過了該串列的下標的最大值

6. 簡述你對字串的理解(存盤什么樣的資料?字串如何定義?如何獲取指定位置的字符?)

答案

字串 就是 一串字符,是編程語言中表示文本的資料型別
在 Python 中可以使用 一對雙引號 " 或者 一對單引號 ' 定義一個字串 或者 一對三引號 ''' 定義一個字串
可以使用 索引 獲取一個字串中 指定位置的字符,索引計數從 0 開始
也可以使用 for 回圈遍歷 字串中每一個字符

關卡二:綜合題

1. 設計一個程式

有一個串列 a = [11, 22, 33]

  • 獲取串列的元素 22

  • 向串列中添加(增)新元素 44

  • 洗掉(刪)串列中的元素 33

  • 修改(改)串列中的元素 22 為 55

  • 查找(查)串列中的元素 55 的下標

提示: 增加和洗掉, 可以使用多種方式實作, 具體可以參考課件的其他語法

答案

ret = (a[1])
a.append(44)
a.remove(33)
a[1] = 55
index = a.index(55)

2. 設計一個程式

按下述步驟實作代碼:

  • 創建一個空字典{},變數名為 info

  • 向字典 info 中添加新的鍵值對,保存如下資訊:姓名是張三

  • 獲取字典中元素 name 的值

  • 修改字典中的元素 'name' 的值為 '李四'

  • 存在字典 info = {'name':'李四'}, 洗掉元素 name

答案

info = {}
info['name'] = '張三'
ret = (info['name'])
info['name'] = '李四'
info.pop('name')

3. 設計一個程式:

  • 要求用戶輸入一個字串,遍歷當前字串并列印,如果遇見“q”,則跳出回圈,如果遇見“ ”(空格)則跳過當前輸出,

  • 提示:for回圈可以遍歷字串

答案

input_str = input("請輸入一個字串:")
for i in input_str:
    if i == "q":
        break
    elif i == " ":
        continue
    print(i)

4. 設計一個程式

已知變數如下:

 a = "itheima"
  • 從鍵盤上輸入一個字母,判斷此字母 是否在變數 a 中,如果在則輸出 找到了, 如果不在 則輸出 查無此字母

答案

a = 'itheima'
b = input('請從鍵盤上輸入一個字母:')
for i in a:
    if i == b:
        print('找到了')
        break
else:
    print('查無此字母')

5. 設計一個程式

現有字典dict1 = {'name':'chuanzhi','age':18} 要求:

  • 1.使用回圈將字典中所有的鍵輸出到螢屏上

  • 2.使用回圈將字典中所有的值輸出到螢屏上

  • 3.使用回圈將字典中所有的鍵值對輸出到螢屏上 輸出方式: name:chuanzhi age:18

答案

dict1 = {'name':'chuanzhi','age':18}
for key in dict1.keys():
    print(key)
for value in dict1.values():
    print(value)
for key, value in dict1.items():
    print(key, value)

關卡三:擴展題

1. 設計一個程式

有這樣的一個串列

product_list = [
    {"name": "電腦", "price": 7000},
    {"name": "滑鼠", "price": 30},
    {"name": "usb電動小風扇", "price": 20},
    {"name": "遮陽傘", "price": 50},
]

然后小明一共有8000塊錢,那么他能不能買下這所有商品? 如果能,請輸出“能”,否則輸出“不能”

提示: 可以使用回圈嵌套和非回圈嵌套2種方式

  1. 回圈嵌套: 先遍歷串列, 再遍歷字典

  2. 非嵌套: 遍歷串列, 直接取字典的值

使用回圈嵌套僅僅是為了熟悉語法, 正常開發中, 使用非嵌套即可.

答案

# 方式一: 使用for回圈嵌套, 遍歷串列取到字典時, 再遍歷字典的鍵值
product_list = [
    {"name": "電腦", "price": 7000},
    {"name": "滑鼠", "price": 30},
    {"name": "usb電動小風扇", "price": 20},
    {"name": "遮陽傘", "price": 50},
]
money = 8000
sum_num = 0  # sum_num初始化為0,是用來存放總價格
for product in product_list:
    for key, value in product.items():
        if key == "price":
            sum_num += value
if money >= sum_num:
    print("能")
else:
    print("不能")

    
# 方式二: 使用for, 根據字典key取值(推薦)
product_list = [
    {"name": "電腦", "price": 7000},
    {"name": "滑鼠", "price": 30},
    {"name": "usb電動小風扇", "price": 20},
    {"name": "遮陽傘", "price": 50},
]
money = 8000
sum_num = 0  # sum_num初始化為0,是用來存放總價格
for product in product_list:
    sum_num += product['price']
if money >= sum_num:
    print("能")
else:
    print("不能")

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302992.html

標籤:其他

上一篇:?? 程式員【代碼管理】工具介紹??,熱門語言更新這么快,你繞不過這一關的!

下一篇:【包郵送書活動】20210924期-開獎通知

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more