回顧
-
循環(huán)語句
- while 語句
- for 語句
-
循環(huán)相關(guān)的語句
- break 語句
- continue 語句
range() 函數(shù)
range(6) # [0, 1, 2, 3, 4, 5]
range(1, 10) # [1, 2, 3, 4, ... 9]
range(1, 10, 2) # [1, 3, 5, 7, 9]
range(10, 1, -3) # [10, 7, 4]
列表 list
列表是一種可以存放任意數(shù)據(jù)類型的序列容器
-
列表是可迭代對象
所有的可迭代對象都一個用 for 語句獲取其中的數(shù)據(jù)元素
-
創(chuàng)建
L = [] L = list() L = [1, 2, 3] L = list(range(5))
-
運(yùn)算
L = [1, 2, 3] + [4, 5, 6] # 拼接 L += [7, 8, 9] # L.extend([7, 8, 9]) # 拆開后依次追加 L = [1, 2] * 3 L *= 3
in / not in 運(yùn)算
if 2 in L: print("2 在 L 中") else: print("2 不在 L 中")
索引運(yùn)算
print(L[2])
切片運(yùn)算
print(L[::2])
索引和切片可以用于所有的序列中(str, list, tuple, bytes, bytearray)
-
列表的增刪改查
-
增
L = [] L.append(1) # L = [1] L.insert(0, 100) # L = [100, 1]
-
刪
L = [1, 2, 3, 4, 5, 6] L.remove(3) # L = [1, 2, 4, 5, 6] del L[3] # 按位置(索引)刪除 L.clear() # 清空
-
改
L = ['A', 2, 'C'] L[1] = 'B' # L = ['A', 'B', 'C']
-
查
L = ['A', 2, 'C'] a = L[1]
-
列表的常用方法
運(yùn)算 | 結(jié)果 |
---|---|
s.index(x[, i[, j]]) | x 在 s 中首次出現(xiàn)項(xiàng)的索引號(索引號在 i 或其后且在 j 之前) |
s.count(x) | x 在 s 中出現(xiàn)的總次數(shù) |
s.append(x) |
將 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x] ) |
s.clear() |
從 s 中移除所有項(xiàng) (等同于 del s[:] ) |
s.copy() |
創(chuàng)建 s 的淺拷貝 (等同于 s[:] ) |
s.extend(t) 或 s += t
|
用 t 的內(nèi)容擴(kuò)展 s (基本上等同于 s[len(s):len(s)] = t ) |
s.insert(i, x) |
在由 i 給出的索引位置將 x 插入 s (等同于 s[i:i] = [x] ) |
s.pop([i]) |
提取在 i 位置上的項(xiàng)短条,并將其從 s 中移除 |
s.remove(x) |
刪除 s 中第一個 s[i] 等于 x 的項(xiàng)目。 |
s.reverse() |
就地將列表中的元素逆序才菠。 |
s.sort ( key=None, reverse=False) |
對列表內(nèi)的數(shù)據(jù)進(jìn)行排序, reverse=False 升序排序茸时,否則是降序排序 |
示例:
s = [1, "二", 3]
value = s.pop(1) # s= [1, 3]; value = '二'
>>> s = [1, 2, 3, 5]
>>> s.reverse() # 反轉(zhuǎn)
>>> s
[5, 3, 2, 1]
>>> s = [1, 2, 3, 4, 2, 2, 3, 4]
>>> s.index(3) # 返回第一次出現(xiàn)的位置的索引
2
>>> s.index(3, 4)
6
>>> s.index(100) # 觸發(fā)異常,要用try 語句處理
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 100 is not in list
>>> s.count(3) # 在列表 s 中 找出所有值為3 的元素的個數(shù)赋访,并返回
2
>>> s.count(2)
3
>>> L1 = [2, 4, 6, 8, 9, 1]
>>> L1.reverse()
>>> L1
[1, 9, 8, 6, 4, 2]
>>> s.sort() # 排序可都,默認(rèn)是升序排序
>>> s
[1, 2, 2, 2, 3, 3, 4, 4]
>>> s.sort(reverse=True)
>>> s
[4, 4, 3, 3, 2, 2, 2, 1]
- python3 中常用于序列的函數(shù)
運(yùn)算 | 結(jié)果 |
---|---|
len(s) |
s 的長度 |
min(s) |
s 的最小項(xiàng) |
max(s) |
s 的最大項(xiàng) # 課間休息: 11:11 回來 |
sum(s) |
求 s內(nèi)所有數(shù)字的和(不允許有其他數(shù)據(jù)) |
>>> L = [1, 5, 8]
>>> len(L)
3
>>> min(L)
1
>>> max(L)
8
>>> sum(L)
14
列表解析(也叫列表推導(dǎo)式)
-
作用
用簡單的表達(dá)式方式來創(chuàng)建列表
-
語法規(guī)則
[ 表達(dá)式 for 自定義變量 in 可迭代對象 ]
# 或
[ 表達(dá)式 for 自定義變量 in 可迭代對象 if 真值表達(dá)式 ] -
示例
# 生成一個列表缓待, 里面有 100 個數(shù)是[1, 4, 9, 16, 25, ...]
# 用 for 語句實(shí)現(xiàn)
L = []
for x in range(1, 101):
L.append(x ** 2)
print(L)# 用列表推導(dǎo)式
L2 = [ x ** 2 for x in range(1, 101)]
print(L2)
L3 = [ x ** 2 for x in range(1, 101) if x % 2 == 0] # 取出所有的偶數(shù)
# L3 = [4, 16, 36, ...] -
練習(xí):
寫程序,輸入任意行文字渠牲。當(dāng)沒有輸入的時(shí)候時(shí)結(jié)束旋炒,
將所有輸入的字符串先保存在一個列表L1中 ,
將L1 中的字符串的長度都計(jì)算出來,存入列表L2 中
1) 然后打印最長的字符串的字符個數(shù)
2) 打印最長的那個字符串
如:
請輸入: hello
請輸入: abcdef
請輸入: a
請輸入: <直接回車結(jié)束輸入>
打忧╄尽:
最長的字符個數(shù)是: 5
最長的字符串是: abcdef
L1 = ['hello', 'abcdef', 'a']
L2 = [5, 6, 1]
mymax = 6 # 求出最長的字符串的長度
pos = L2.index(6) # 求出最長的字符串的位置
...
元組 tuple
元組是不可改變的列表, 同 列表list 一樣瘫镇,元組可以存放任意類型的數(shù)據(jù),但是答姥,一旦創(chuàng)建將不可修改
-
創(chuàng)建元組的字面值
用小括號() 括起來铣除,單個元素括起來后加逗號來區(qū)分單個元素還是元組
t = () # 空元組 t = (100,) # 含有一個數(shù)據(jù)元素的元組 t = 100, # 含有一個數(shù)據(jù)元素的元組 t = (1, 2, 3) # 含有三個數(shù)據(jù)元素的元組 t = 1, 2, 3 # 含有三個數(shù)據(jù)元素的元組
type(x) 函數(shù)用來返回?cái)?shù)據(jù)x的類型
-
創(chuàng)建元組的函數(shù) tuple
t = tuple() # t = () t = tuple(range(5)) # t = (0, 1, 2, 3, 4)
-
tuple 的運(yùn)算
tuple 是序列的一種, 同列表的運(yùn)算鹦付,但是不可以修改元組
>>> t = (1, 2, 3) + (4, 5, 6) >>> t += (7, 8, 9) >>> t = t * 2 >>> t *= 2 >>> 5 in t True >>> t[0] 1 >>> t[0:2] (1, 2)
元組的方法
運(yùn)算 結(jié)果 s.index(x[, i[, j]]) x 在 s 中首次出現(xiàn)項(xiàng)的索引號(索引號在 i 或其后且在 j 之前) s.count(x) x 在 s 中出現(xiàn)的總次數(shù)
容器都是可迭代對象, 可以用for 語句來遍歷容器
for x in [1, 2, 3]:
print(x)
for y in (1, 2, 3):
print(y)
-
列表和元組的 + 和 += 運(yùn)算
# 列表(可變) >>> L1 = [1, 2, 3] + [4, 5, 6] >>> L2 = L1 # 兩個變量同時(shí)綁定同一個列表 >>> L2 += [7, 8, 9] >>> print(L1) # [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print(L2) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 元組(不可變) >>> T1 = (1, 2, 3) + (4, 5, 6) >>> T2 = T1 # 兩個變量同時(shí)綁定同一個元組 >>> T2 += (7, 8, 9) >>> print(T1) # (1尚粘,2, 3, 4, 5, 6) >>> print(T2) # (1, 2, 3, 4, 5, 6, 7, 8, 9)
字典 dict
-
什么是字典
- 字典是一種可變的容器,可以存儲任意類型的數(shù)據(jù)
- 字典的數(shù)據(jù)都是以鍵(key)-值(value)對的形式進(jìn)行映射存儲.
- 字典的數(shù)據(jù)是無序的
- 字典的鍵不能重復(fù)敲长,且之能用不可變類型作為字典的鍵
- 字典中的數(shù)據(jù)只能用"鍵"key 進(jìn)行索引郎嫁,不能用整數(shù)進(jìn)行索引
-
創(chuàng)建字典的字面值:
字典的表示方式以 {} 括起來, 以英文的冒號 (:) 分隔鍵值對祈噪,各鍵值對之間用逗號(,)分隔
d = {} # 創(chuàng)建空字典 d = {'name': "weimingze", "age": 35} d = {'a': [1, 2, 3]} d = {'b': {"bb": 222}} d = {1:'壹', 2:'貳', 5:'伍'} d = {(1, 2, 3):'壹貳伍'}
-
以下寫法會存在問題
d = {'a': 1, 'b': 2, 'a': 3} # 字典的鍵不能重復(fù) d = {'a': 3, 'b': 2} d = {[1, 2, 3]: 'a'} # 不能用可變類型作為字典的鍵 # 報(bào)錯
-
dict 的創(chuàng)建函數(shù) dict
d = dict() # d = {} d = dict([("name", "魏明擇"), ("age", 35)]) # {'name': '魏明擇', 'age': 35} d = dict(a=1, b=2, c=3) # {'a':1, 'b':2, 'c':3} d = dict([1, 2, 3, 4]) # 錯
注: python 中有四種可變類型
- 列表 list
- 字典dict
- 集合 set
- 字節(jié)數(shù)組 bytearray
persons = [ {'name': 'weimz', 'age': 35}, {'name': '小張', 'age': 18}, ]
-
字典的鍵索引
- 語法
字典[鍵key]
用鍵索引可以查看字典中的數(shù)據(jù)
-
示例:
d = {'one': 1, 'two': 2} print(d['two'])
-
添加和修改字典的元素
- 語法
字典[鍵key] = 表達(dá)式
鍵不存在, 會創(chuàng)建鍵并綁定鍵對應(yīng)的值鍵存在, 會改變鍵對應(yīng)的值
-
示例:
d = {} d['name'] = 'tarena' # 添加鍵值對 d = {'name': 'tarena'} d['age'] = 18 # d = {'name': 'tarena', 'age': 18} d['age'] = 19 # 改變 'age' 鍵對應(yīng)的值 d = {'name': 'tarena', 'age': 19}
-
刪除 字典的元素
-
語法
del 字典[鍵]
-
示例:
>>> d = dict(a=1, b=2) # d = {'a': 1, 'b': 2} >>> del d['a'] >>> d {'b': 2}
-
-
in / not in 運(yùn)算符
用 in 可以判斷一個鍵是否存在于字典中,如果存在返回 True, 否則返回 False
not in 與 in 相反
-
示例
>>> d = dict(a=1, b=2) # d = {'a': 1, 'b': 2} >>> 'a' in d True >>> 1 in d False >>> 'hello' not in d True
-
-
字典是可迭代對象, 字典只能對所有的鍵進(jìn)行迭代訪問
>>> d = {'name': 'tarena', 'age': 19} >>> for k in d: ... print(k) ... name age >>> for k in d: ... print("key=", k, 'value=', d[k]) ... key= name value= tarena key= age value= 19
-
字典的常用方法
方法D代表字典 說明D D.clear() 清空字典 D.copy() 復(fù)制 D.get
(key[, default])如果 key 存在于字典中則返回 key 的值泽铛,否則返回 default。 如果 default 未給出則默認(rèn)為 None
辑鲤,因而此方法絕不會引發(fā)KeyError
厚宰。D.pop(key) 移除鍵, 同時(shí)返回鍵對應(yīng)的值 -
示例
>>> d = {'name': 'tarena', 'age': 19} >>> >>> d['age'] 19 >>> d['address'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'address' >>> d.get('address', '未填寫住址') '未填寫住址' >>> d.get('age', 0) 19 >>> n = d.pop('name') >>> d { 'age': 19} >>> n 'tarena'
列表、元組遂填、字典小結(jié)
列表和元組是有序的铲觉,字典的存儲是無序的
列表、字典是可變的,元組是不可變的
字典的鍵索引速度快吓坚,列表的整數(shù)索引速度快
-
列表和元組是順序存儲的撵幽,字典是散列存儲的
d = {'a':1, 'b':2, .........}
print(d['c']) # 速度快
L = [7, 5, 1, ........]
print(L[10009]) # 速度快
- 字典的 in / not in 運(yùn)算符快于 列表的 in / not in 運(yùn)算符
L = ['孫悟空', '趙云', '呂布', ...]
if '王昭君' in L: # 速度慢
pass
D = {'孫悟空':'花果山', '趙云':'長山', '呂布':'石家莊', .....}
if '王昭君' in D: # 速度快
pass
集合 set/ 固定集合 frozenset
- 集合是可變的容器办成,固定集合是不可變的集合
- 集合相當(dāng)于只有鍵沒有值的字典
- 集合是無序的存儲結(jié)構(gòu)
- 集合內(nèi)的數(shù)據(jù)都是唯一的尸诽,不可變的
-
創(chuàng)建集合的方式
空集合 set()
非空集合 用 {} 括起來窗怒,值用逗號分隔開
s = set() # 用函數(shù)空集合 s = {1, 2, 3, 4} # 創(chuàng)建非空集合的字面值 s = set(range(5)) # 調(diào)用 set(可迭代對象) 來創(chuàng)建集合 s = {0, 1, 2, 3, 4} s = set("ABC") # s = {'B', 'C', 'A'} s = set("ABCCCCCCC") # s = {'B', 'C', 'A'} s = set(['ABC']) # s = {'ABC'}
-
創(chuàng)建固定集合frozensets的方式
fs = frozenset() # 空固定集合 fs = frozenset() fs = frozenset([1, 2, 3]) # fs = frozenset({1, 2, 3})
集合和固定集合的運(yùn)算
in/ not in 運(yùn)算符 與列表相同
-
其他運(yùn)算
& 交集 | 并集 - 補(bǔ)集 ^ 對稱補(bǔ)集 < 子集 > 超集
-
示例
s1 = {1, 2, 3} s2 = {2, 3, 4} s3 = s1 & s2 # s3 = {2, 3} # 交集(只輸出重復(fù)的) s4 = s1 | s2 # s4 = {1, 2, 3, 4 } 并集(全部輸出颊咬,加上去重) s5 = s1 - s2 # s5 = {1} 補(bǔ)集(s1 補(bǔ)集 s2 就輸入 s1 補(bǔ)集) s6 = s1 ^ s2 # s6 = {1, 4} # 對稱補(bǔ)集(不輸出重復(fù)的) s7 = {1, 2} < {1, 2, 3} # s7 = True (123 是 12 的子集) s8 = {1, 2} > {1, 2, 3} # s8 = False (12 是 123 的超集) s9 = {4, 5, 6, 7} > {5, 6} # {4, 5, 6, 7} 是 {5, 6} 的超集
-
集合set的方法
方法 說明 S.add(e) 添加e S.remove(e) 刪除e S.clear() 清空集合 S.pop() 移除一個并返回,如果集合為空則觸發(fā)ValueError -
容器總結(jié)
-
可變和不可變
- 可變的容器
list dict set bytearray(字節(jié)數(shù)組)
- 不可變得容器
tuple, frozenset, bytes(字節(jié)串)
-
有序和無序
-
有序
list tuple bytes bytearray
-
無序
dict set frozenset
-
-
課后練習(xí)1
寫程序, 輸入一個整數(shù)n拴还,打印 寬度為n 的正方形
如:
請輸入: 4
打印:
####
# #
# #
####
請輸入: 5
打印:
#####
# #
# #
# #
#####
- 課后練習(xí)2
寫一個程序援奢,輸入任意行文字驻债,當(dāng)輸入為空字符串時(shí)結(jié)束輸入挚躯,將所有的字符串以最長的字符串寬度打印如下方框
請輸入: hello
請輸入: hello world
請輸入: <回車輸入結(jié)束>
+-------------+
| hello |
| hello world |
+-------------+
- 課后練習(xí)3(明天再完成)
寫一個程序: 輸入一個整數(shù)强衡,代表樹干的高度,打印如下圣誕樹
請輸入: 3
打印:
*
***
*****
$
$
$
請輸入: 4
打印:
*
***
*****
*******
$
$
$
$
- 課后練習(xí)4
算出 100 ~ 999 的水仙花數(shù)
水仙花數(shù)是 指百位的3次方 + 十位的3次方 + 各位的3次方 等于原數(shù)的數(shù)
打印出所有的 水仙花數(shù)
- 課后練習(xí)5
打印 九九 乘法表
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
....
1x9=9 ........ 9x9=81