1. 程式人生 > >3. 字串、列表、元組、字典

3. 字串、列表、元組、字典

3.1 for迴圈

for 臨時變數 in 列表或者字串等可迭代物件:
迴圈滿足條件時執行的程式碼

3.2 break和continue

  • 1 break 立刻結束break所在的迴圈
  • for 迴圈中
  • while迴圈中
  • 2 continue 用來結束本次迴圈,緊接著執行下一次的迴圈
  • for 迴圈中
  • while迴圈中

break/continue只能用在迴圈中,除此以外不能單獨使用

break/continue在巢狀迴圈中,只對最近的一層迴圈起作用

3.3字串介紹

雙引號或者單引號中的資料,就是字串

3.4字串輸出

3.5字串輸入

3.6下標和切片

  • 1 下標索引

python中下標從 0 開始

  • 2 切片
  • 切片是指對操作的物件擷取其中一部分的操作。字串、列表、元組都支援切片操作。

  • 切片的語法:[起始:結束:步長]

注意:選取的區間從"起始"位開始,到"結束"位的前一位結束(不包含結束位本身),步長表示選取間隔

  • 字串名[m:n:k] 來表示從下標為m到下標為n,每k個取一個

索引是通過下標取某一個元素

切片是通過下標去某一段元素

str1 = "hello world"

# print(str1[4])   # o
# print(str1[2:7])  # llo w
# print(str1[:3])   # hel   # 第一個m省略表示從第一個元素開始取
# print(str1[3:])    # lo world   # n省略表示從下標為m開始取到最後一個元素
# print(str1[:])   # "hello world"
# print(str1)  # "hello world"
# print(str1[::2])  # hlowrd


# print(str1[::-1])   # dlrow olleh   將字串進行反轉,逆轉,逆序,倒序
# print(str1[-3])   # 取倒數第三個字元
# print(str1[2:-3])   # llo wo
# print(str1[-8:8])  # lo wo

3.7字串常見操作

mystr = ‘hello world itcast and itcastcpp’

  • mystr.find(“it”) 在mystr字串中找"it"這個子串,找到就返回第一次出現時候的下標,找不到返回-1

  • mystr.index(“it”) 在mystr字串中找"it"這個子串,找到就返回第一次出現時候的下標,找不到則報錯

  • mystr.count(“it”) 在mystr字串中找"it"這個子串,找到就返回出現的次數,找不到返回0

  • mystr.isdigit() 判斷mystr字串是不是一個純數字的字串,如果是返回True,否則返回False

  • mystr.isalpha() 判斷mystr字串是不是一個純字母的字串,如果是返回True,否則返回False

  • mystr.isspace() 判斷mystr字串是不是一個純空格的字串,如果是返回True,否則返回False

  • mystr.startswith(“ab”) 判斷mystr字串是不是以子串ab開始的,如果是返回True,否則返回False

  • mystr.endswith(“ab”) 判斷mystr字串是不是以子串ab結尾的,如果是返回True,否則返回False

  • mystr.replace(子串1, 字串2) 返回一個新字串,把mystr中的子串1,全部替換成字串2

  • mystr.strip() 返回一個新字串,去掉mystr字串中的前後空格

  • mystr.lstrip() 返回一個新字串,去掉mystr字串中的前空格

  • mystr.rstrip() 返回一個新字串,去掉mystr字串中的後空格

  • mystr.split(子串) 返回一個列表,把mystr按照子串進行分割成若干部分,每個部分作為列表中的每個元素,這個子串最終消失

  • mystr.partition(子串) 返回一個元組,把mystr按照子串進行分割成3個部分,子串作為第2個元素,子串前面的字串作為元組第一個元素,子串後面的字串作為元組第3個元素

  • mystr.upper() 返回一個新字串,把字串中所有的字母變成大寫字母

  • mystr.lower() 返回一個新字串,把字串中所有的字母變成小寫字母

  • mystr.capitalize() 返回一個新字串,把字串中第一個字母轉換成大寫,其餘小寫

  • mystr.title() 返回一個新字串,把字串中每個單詞第一個字母轉換成大寫,其餘小寫

  • mystr.swapcase() 返回一個新字串,把字串中字母進行大小寫互換

  • mystr.center(100) 返回一個新字串,讓mystr在100個字元的長度中做居中效果

  • len(mystr) 返回出字串中字元的個數

mystr = 'hello world itcast and itcastcpp'

# print(mystr.find("xxx"))
# print(mystr.index("xxx"))
# print(mystr.count("ito"))

# print(mystr.split(" "))  # ['hello', 'world', 'itcast', 'and', 'itcastcpp']
# print(mystr.split("it"))   # ['hello world ', 'cast and ', 'castcpp']

# file_name = "xxx.html"
# print(file_name.endswith(".py"))


lines = "GET /index.html 200OK"
# print(lines.split(" "))

lines = "hello "
print(len(lines))

3.8 列表介紹

namesList = ['xiaoWang','xiaoZhang','xiaoHua']

比C語言的陣列強大的地方在於列表中的元素可以是不同型別的

3.9 列表的迴圈遍歷

  • 1 使用for迴圈
  • 2 使用while迴圈
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"]   # 定義一個列表

# print(name_list)
# print(type(name_list))  # <class 'list'>
# print(name_list[1])  # 獲取到下標為1的元素


for i in name_list:   # for迴圈遍歷這個列表
    print(i)


# i = 0
# while i < 4:  # while迴圈遍歷這個列表
#     print(name_list[i])
#     i += 1
### 3.10 列表的常用操作 ###
  • append
  • extend
  • insert
  • in not in
  • index count
  • 刪 remove del clear
  • 排序 sort reverse
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"]
print(name_list)
# 增
# name_list.append("liqi")   # 在列表最後追加一個元素
# name_list.insert(1, "liqi")   # 在下標為1的位置插入一個數據"liqi"
# name_list.extend(["liqi", "baba"])
# name_list.append(["liqi", "baba"])   # ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', ['liqi', 'baba']]
# print(name_list)


# 刪除
# name_list.remove("lisi")   # 刪除"lisi"這個元素
# aaa = name_list.pop(2)    # 如果沒有引數預設刪除最後一個元素, 如果傳了一個數字,表示刪除這個下標所在的元素, 這個pop功能會返回(得到)這個刪除的資料
# print(name_list)
# print(aaa)

# name_list.clear()   # 清空列表中所有資料
# print(name_list)

del name_list[2]
print(name_list)

name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"]
print(name_list)


# 改
# name_list[1] = "liqi"
# print(name_list)

# 查
# print(name_list[2])  # wangwu
# print("liqi" in name_list)   # False
# print("liqi" not in name_list)  # True
#
# if "liqi" not in name_list:
#     ....
# 問:"lisi"在列表中出現多少次   name_list.count("lisi")
# print(name_list.count("lisi"))
# 問:"lisi"在列表中的下標是多少?   name_list.index("lisi")
# print(name_list.index("lisi"))


nums = [20, 99, 1020, -9, 6, 1]

# print(nums)  # [20, 99, 1020, -9, 6, 1]
# nums.sort()   # 排序,從小到大排
# print(nums)  # [-9, 1, 6, 20, 99, 1020]
# nums.reverse()    # 列表逆轉、倒序
# print(nums)  # [1020, 99, 20, 6, 1, -9]

# print(nums[::-1])
# print(nums[:3])

3.11 列表的的巢狀

	"""
[ [], [] , []]


一個學校,有3個辦公室,現在有8位老師等待工位的分配,請編寫程式,完成隨機的分配
"""
import random

offices = [[], [], []]   # 為什麼裡面每一個辦公室也是一個列表?因為:一個辦公室可以進入多個老師
teachers = ["A", "B", "C", "D", "E", "F", "G", "H"]


for i in teachers:   # i就是每一個老師
    offices[random.randint(0, 2)].append(i)

# print(offices)
# [['C', 'F', 'G'], ['A', 'D', 'E', 'H'], ['B']]

for i in offices:  # print要列印多少次取決於多少辦公室,所以應該遍歷辦公室列表
    # i是offices中的每一個小列表,即每一個辦公室
    # 提示: i是offices的元素,就可以通過.index()這個功能來求到i所在的下標
    print("第%s間辦公室的老師有:" % (offices.index(i)+1), end="")

    for j in i:  # i是offices中的每一個小列表,即每一個辦公室
        # j 是i列表中的每一個老師
        print(j, end="\t")

        # 裡層的這個for一旦執行完畢說明老師列印完畢了,說明一行已經結束

    print()

3.12 元組

Python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號
訪問 count index

"""
元組作用:展示多個數據
特點: 元組元素不可修改,(不能新增、刪除、修改資料)


tup3 = (100,)
"""

tup = (10, 20, 30, 40, "abc", 40, [100, 200, 300])

# print(tup, type(tup))


# 查:
# print(tup[1])
# print(40 in tup)
# print(40 not in tup)
# print(tup.count(40))
# print(tup.index(40))

# tup[1] = 300   # 報錯

# print(tup[6])  # [100, 200, 300]
# print(tup[6][0])  # 100
# tup[6][0] = 10000
# print(tup)  # (10, 20, 30, 40, 'abc', 40, [10000, 200, 300])
# print(100 in tup)  # False
# print(100 in tup[6])  # True


tup2 = (100)
print(tup2, type(tup2))  # 100 <class 'int'>
tup3 = (100,)
print(tup3, type(tup3))  # (100,) <class 'tuple'>

3.13 字典介紹

3.14 字典的常見操作1

  • 檢視元素
  • 修改元素
  • 增加元素
  • 刪除元素
  • del
  • clear
# list1 = [27, "python", "AI"]
#
# print(list1["job"])

dic = {"age": 27, "job": "AI", "name": "python"}

print(dic, type(dic))


# 查
# print(dic["name"])  # python
# print(dic["age"])  # 27
# print(dic["age1"])  # 報錯
# print(dic.get("name"))  # python
# print(dic.get("age1"))   # None

# 刪除
del dic["age"]
print(dic)  # {'job': 'AI', 'name': 'python'}


# 新增
dic["age"] = 28
print(dic)


# 修改
dic["age"] = 29
print(dic)

3.15 字典的常見操作2

  • lens()
  • keys
  • values
  • items
"""

{"name": "python", "age": 27, "job": "AI"}
{鍵:值,鍵:值,鍵:值}
{key: value, key: value, key: value}


如何獲取字典中的某個值?
字典名[鍵名]


鍵名的資料型別可以是:字串, 數字, 元組
值可以是其他的任意資料
"""

# list1 = [27, "python", "AI"]
#
# print(list1["job"])

dic = {(10, 20): 27, "job": "AI", "name": "python"}

print(dic, type(dic))
print(dic[(10, 20)])

3.16 字典的遍歷

通過for … in … 我們可以遍歷字串、列表、元組、字典等

  • 遍歷key
  • 遍歷value
  • 遍歷元素
  • 遍歷key-value鍵值對
dic = {"age": 27, "job": "AI", "name": "python"}

# for i in dic:
#     print(i)

# for i in dic.keys():   # 遍歷字典的鍵
#     print(i)

# for i in dic.values():   # 遍歷字典的值
#     print(i)

# for i in dic.items():  # 遍歷字典的鍵值對
#     print(i)   # i就是每一個鍵值對組成的元組


dic = {"age": 27, "job": "AI", "name": "python"}

for key, value in dic.items():  # 遍歷字典的鍵值對
    print(key)   # key就是每一個鍵
    print(value)   # value就是每一個值


# a, b = (10, 20)  # 拆包
# print(a)
# print(b)
  • enumerate()
    enumerate() 函式用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。
chars = ['a', 'b', 'c', 'd']
for i, chr in enumerate(chars):
	print i, chr
結果:
0 a
1 b
2 c
3 d

3.17 判斷是否是閏年

"""

判斷是否是閏年
2、請實現一個判斷使用者輸入的年份是否是閏年的程式
提示:
1.能被400整除的年份      if num % 400 == 0: 
2.能被4整除,同時不能被100整除的年份
以上2種方法滿足一種即為閏年

"""


num = int(input("請輸入一個年份"))

if num % 400 == 0 or (num % 4 == 0 and num % 100 != 0):
    print("%s是閏年" % num)
else:
    print("%s是平年" % num)

3.18 公共方法

  • 運算子

  • python內建函式
  • cmp
  • len
  • max
  • min
  • del
  • 多維列表/元祖訪問的示例