一、 序列類型入門
python的數據類型:int float bool str
運算符+ - * / % > < and or not
流程控制ifelsewhilefor
掌握python的2大容器類型數值類型(3個):int float bool序列類型容器(3個):str : 可以存儲 數字、字母、特殊符號、等一切文本數據的容器list (列表)tuple (元組)散列類型容器(2個) set(集合)、dict(字典)函數基礎
6.1 序列簡介
數據結構:編程語言中會將,以某種方式組合起來的數據元素集合稱為數據結構
-
序列類型:存放多個值在連續的內存空間中,并且這些值按照一定順序排列,每個值都有所在位置的編號 (下標) 訪問它們
-
序列類型:可以存放多個數據的一種數據類型,他有序
6.2 列表和元組
6.2.1 列表 list
列表 list:有序的集合,可以裝任何數據類型的容器
-
創建列表
-
- 直接寫 [ ] 括起來,里面的元素使用 逗號 隔開
# 創建一個變量,數據是列表,長度為7 name_arr = ['小明', '小李', '年齡', '水果',10,6.666,True] print(name_arr) print(type(name_arr)) #查看數據類型是list型# 注意,請勿在字符串中寫上, 這個長度為1 name_arr = ['香蕉,橘子,榴蓮'] print(name_arr) print(type(name_arr))
-
- range() 函數 : 根據給定的參數,生成有規律的整數序列
range(start,stop,step=1)- start 開始- stop 停止- step 步長,可以不填,默認1 包頭不包尾/前閉后開[ ) 🌰: range(1,101) #輸出1-100,取不到101
print(list(range(1, 1001))) # 生成1~1000的列表range(start,stop,step)- start 開始- stop 停止- step 步長# 需要1~100中間的偶數 print(list(range(2, 101,2)))# 需要10~1倒序來 arr = list(range(10, 0, -1)) # 步長也可以為負數 print(arr)
-
6.2.2 元組 tuple
元組和列表基本一樣,也是用來存儲多個數據的,可以裝任何數據類型的容器。
-
最大的區別:列表是可以修改的,
- 元組一但創建以后,則無法再變更
- 元組:不能改的列表
-
創建方式
-
直接使用 ( ) 英文括號 圈起來,數據之間用英文逗號隔開
# 正常情況 元組是() 列表是[ ] number = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, True, False, '哈哈哈') print(number, type(number)) # 也可以直接 數據1,數據2, number = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, True, False, '彬彬' print(number, type(number))# 一個元素的特殊情況 當元組只有一個元素的時候,需要 (1,) 表示 number = (1,) # (1) 括號被優先理解為 優先級 print(number, type(number))
2 . 也能通過 range + 類型轉換創建
t = tuple(range(1,101))print(t) print(type(t))
-
6.3 序列類型基本操作
序列:list、tuple、str 全部通用
6.3.1 下標
下標是序列中每個元素的編號
“Python是世界上最好的語言”
序列類型中比如字符串,每個字符串都會存在一個下標(索引),從左往右開始的。
- 注意,下標默認是從0開始
下標的作用:可以幫助訪問序列中的某個元素
語法格式
***序列[下標]***
-
s = "Python是世界上最好的語言"print(s[0]) # P 下標從0開始 print(s[5]) # n# 創建一個變量,數據是列表,長度為4 name_arr = ['彬彬', '翠果', '冰糖', '清越'] print(name_arr,type(name_arr)) name = name_arr[0] print(name,type(name))# 訪問的時候,不能超出下標最大范圍 0~3 # print(name_arr[4]) print(name_arr[3])
-
可以反著取下標:右往左 -1 -2 -3
url = "https://www.baidu.com/s?wd=hello&rsv_spt=1"
print(url[41]) # 正向下標
print(url[-1]) # -1 表示倒數第一個
6.3.2 切片
單獨提取一個,可以直接使用 序列[下標]
L = ['彬彬', '翠果', '清越', '晶晶', '不凡']L2 = [L[1], L[2], L[3]] # 笨方法
print(L2)# 切片也能干這種事情
"""單獨訪問: 序列[下標]切片訪問: 序列[下標1:下標2] 可以切分序列,切出來類型不變下標1:表示開始的下標下標2:表示結尾的下標包頭不包尾/前閉后開
"""# 切片:截取多個元素
# 語法:序列[開始下標:結束下標+1]
# 注意:結束下標同range一樣,不包尾部
L = ['彬彬', '翠果', '清越', '冰糖', '不凡']# 也是不包括 尾部 語法和range非常像
print(L[1:3]) # 從下標1處取到下標2處
print(L[1:4]) # 從下標1處取到下標3處
print(L[1:5]) # 從下標1處取到下標4處
print(L[1:2]) # 從下標1處取到下標1處s = "hello world"
print(s[0:5]) # 開始下標0 結束下標4 由于取不到尾 所以4+1
# 簡寫:如果是從頭開始切的
print(s[:5]) # 頭部可以省略# 提取:world
print(s[6:]) # 如果是切到尾部,也可以省略不寫# 小練習:以下是什么效果?
print(s[:]) # 從頭切到尾# 切片和range語法很像
# 擴展語法:序列[開始下標:結束下標+1:步長單位=1] (了解)
s = "hello world"
# print(s[::2]) # 從頭到尾 2步隔著切
# print(s[::5])# ★步長常用的時候:利用-1步長來反轉序列
print(s[::-1]) # 當步長為負數的時候,頭部就是右邊,尾部就是左邊
6.3.3 成員運算符
返回的也是布爾值
元素 in 容器
運算符 | 描述 | 實例 |
---|---|---|
in | 如果在指定的容器中找到值返回 True,否則返回 False。 | x 在 y 容器中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的容器中沒有找到值返回 True,否則返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
in : 屬于 , 可以判斷某個元素是否屬于 序列
not in : 不屬于
# 列表判斷元素是否存在
arr = ["張三",'李四','王五']
while True:name = input("請輸入用戶名:")print(name in arr) # 原來判斷是否存在一個元素s = "hello python3.8.10"
# 字符串單個判斷存在不存在
print("p" in s) # True
print(" " in s) # True# 整體判斷,要當作一個整體去找
print("hello" in s) # True 能找到hello這個整體
print("hellopython" in s) # False
print("hello python" in s) # True
print("3.8.10" in s) # True
print("3.10.8" in s) # False# 空字符串: ""
print("" in s) # 空字符串屬于一切字符串子集
6.3.4 序列也能運算
序列類型相加 都是合并
- 字符串相加:‘a’ + ‘b’ = ‘ab’
- 列表相加 : [1,2,3] + [4,5,6] = [1,2,3,4,5,6]
字符串 是可以通過 相加 和 乘法 運算arr = [1,2,3]
arr2 = [3,4,5]
arr + arr2 = [1,2,3,3,4,5]# 乘法只能乘整數,本質也是反復和自己拼接
arr2 * 3 => [3,4,5,3,4,5,3,4,5]
6.4 序列常用內置函數
實現和序列相關的操作
函數:print( ) type( ) input( ) id( )
- python中的函數,不要等價數學函數
- 函數等于是一個功能,可以直接使用的封裝好的工具
- 學習一個函數就學2個東西
- 作用是什么
- 參數怎么填
- 他返回什么東西沒?
內置函數
- python官方提供的功能
函數 | 功能 |
---|---|
len() | 計算序列的長度,即返回序列中包含多少個元素。 |
max() | 找出序列中的最大元素。注意,對序列使用 sum() 函數時,做加和操作的必須都是數字,不能是字符或字符串,否則該函數將拋出異常,因為解釋器無法判定是要做連接操作(+ 運算符可以連接兩個序列),還是做加和操作。 |
min() | 找出序列中的最小元素。 |
sum() | 計算元素和。 |
sorted() | 對元素進行排序 |
6.4.1 len( )
len( ) : 計算序列的長度,即返回序列中包含多少個元素。
序列的長度就是指序列的元素數量# len()
# 作用:求出序列的長度
# 參數(括號里面的東西):序列
# 返回:長度 int
print(len(name_list))
print(len(list1))
s = "hello world"
print(len(s))s = "hello"
print(len(s)) # 字符串的長度lis = [1, 2, 3, '哈哈']s = "hello"
# 最大下標 = 長度 - 1 # 為什么要減1,因為下標是從0開始的
index = len(s) - 1
print(s[index])
6.4.2 ASCII編碼(了解)
ASCII 本質就是一個一個數,計算機采用了這個編碼方式
計算機真正存儲:01010101111111111
計算機沒有辦法去真正有意義的存 ‘a’ 進去
通過規則
‘a’ -> 97 -> 0110 0001
字符->ASCII編碼->二進制
# python支持使用 ord()函數 將一個字符作為參數,返回對應的ascii值
# chr()函數 將一個整數作為參數,返回對應的字符s = 'a'
print(ord(s)) # a:97 A:65
print(chr(97))
6.4.3 max( )與min( )
max( ) : 返回給定參數的最大值,參數可以是序列
作用:求最大值和最小值
參數:序列
返回:最值lis = [9, -5, 5, 2, 7, 100, 1, 30]# 最大值 max
print(max(lis))
# 最小值 min
print(min(lis))# 字符串也是可以比較大小的。
# ascii編碼,本質上也是在比數字
s = ['~','b','c','z','@']
print(max(s))
6.4.4 sum( )
sum(序列) : 對序列進行求和計算
作用:對序列進行求和計算
參數:序列
返回:和 ints = [1,2,3,4,5,6]
print(sum(s))# 求1+2+3+...+100 的和,不用fora = list(range(1,101)) # 創建一個 1~100的a列表
print(sum(a)) # 對a列表進行求和
6.4.5 sorted( )
sorted: 可以對序列類型進行排序操作,支持升序(默認)和降序,并返回一個新的序列
lis1 = [10, 5, 11, 6, 8, 0]作用:對序列進行排序
參數:序列
返回:返回的一定是列表"""print 輸出 額外功能參數sep 分隔符功能end 結尾換行sorted 排序默認是升序的reverse = True # 降序reverse = False # 升序 默認的
"""
list1 = [1, 9, 2, 8, 3, 7, 4, 6, 5]print(sorted(list1, reverse=True))
# 注意括號區分 不要寫到print里面去了,reverse是sorted函數功能參數
# 錯誤案例
# print(sorted(list1),reverse=True)list1 = [1, 9, 2, 8, 3, 7, 4, 6, 5]
# 方法二,也可以先排好有序,然后直接 [::-1] 反轉
print(sorted(list1)[::-1])
案例:水仙花數
求所有三位數的水仙花數
"""如何提取三位數的 各個部位"""
# 方法一:轉字符串來提取下標
# for i in range(100, 1000):
# # # i 就是表示三位數
# str_i = str(i) # 整數 轉 字符串(序列)
# x = int(str_i[0])
# y = int(str_i[1])
# z = int(str_i[2])
# if x ** 3 + y ** 3 + z ** 3 == i:
# print(i, "水仙花數")# # 方法二:數字計算取出來
# for i in range(100, 1000):
# x = i // 100
# y = i % 100 // 10
# z = i % 10
# if x ** 3 + y ** 3 + z ** 3 == i:
# print(i, "水仙花數")# 方法三:循環嵌套
# for x in range(1, 10):
# for y in range(0, 10):
# for z in range(0, 10):
# i = x * 100 + y * 10 + z # 還原成3位數
# if x ** 3 + y ** 3 + z ** 3 == i:
# print(i)