"""
1.分之結構
if
if-else
if-elif-else
if 條件:
代碼段
if 條件:
代碼段1
else:
代碼段2
if 條件1:
代碼段1
elif 條件2:
代碼段2
...
else:
代碼段3
2.循環(huán)結構
for-in
for 變量 in 序列:
循環(huán)體
序列:字符串、range、列表、字典、元祖、集合、迭代器、生成器
python3.x range() ----> python2.x xrange()
while 條件語句:
循環(huán)體
遍歷序列, 循環(huán)次數(shù)確定 -- for
循環(huán)次數(shù)不確定 -- while
continue,break, else
"""
num = 100
while num >= 0:
print(num)
num -= 2
"""
1.什么是列表(list)
列表是python提供的容器型數(shù)據(jù)類型??勺儾⑶矣行虻?br>
可變 - 列表中的每個元素的值可變,列表的長度可變,列表中元素的順序可變 (支持增刪改)
有序 - 每個元素可以通過下標來確定位置
2.列表的字面量: 通過[]括起來,里面有多個元素,每個元素用逗號隔開;
[1, 2, 3]
[10, 'abc', True]
num = 100; [num, 200]
[] -- 空列表
注意:列表元素的類型可以是任何python支持的數(shù)據(jù)類型;并且同一列表中不同元素的類型可以不一樣
"""
scores = [90, 89, 100, 67]
print(scores)
# 任何類型的數(shù)據(jù)都可以作為列表的元素
list1 = [90, 10.34, 'abc', True, [1, 2, 3], {'a': 10}, lambda x: 2*x]
print(len(list1))
list2 = [
90,
10.34,
'hello',
{'name': 'xiaoming'}
]
a = [1, 10]
list3 = [a, 20]
print(list3)
2.獲取列表元素(和字符串獲取字符的語法一樣)
"""
a.獲取單個元素
列表[下標] - 獲取列表中指定下標對應的元素
"""
list1 = [10, 20, 30, 'abc']
print(list1[0], list1[-1])
"""
b.獲取部分元素(切片) - 結果是列表
列表[開始下標:結束下標:步長]
注意:取不到的時候,結果是空列表
"""
moves = ['毒液', '功夫熊貓', '肖生克的救贖', '這個殺手不太冷', '拯救大兵瑞恩']
print(moves[1:3]) # ['功夫熊貓', '肖生克的救贖']
print(moves[1:5:2]) # ['功夫熊貓', '這個殺手不太冷']
print(moves[3:-3:-1]) # ['這個殺手不太冷']
print(moves[3:-3:1]) # []
print(moves[:2]) # ['毒液', '功夫熊貓']
print(moves[2::-1]) # ['肖生克的救贖', '功夫熊貓', '毒液']
print(moves[::-1]) # 列表中的元素倒序
c.一個一個的取出所有元素(遍歷)
可以使用for循環(huán)直接遍歷列表拿到每個元素; (操作元素的時候和下標無關)
可以通過遍歷列表元素對應的下標來遍歷列表元素; (操作元素的時候和下標有關)
"""
直接遍歷
for item in moves:
print(item)
通過遍歷下標遍歷
for index in range(len(moves)):
print('下標:',index)
print(moves[index])
# 練習:統(tǒng)計一個班的學生的成績,存到一個列表中。求整個班的學生的平均成績.
# [90, 89, 80, 70, 98, 67]
# 打印出平均成績
scores = [90, 89, 80, 70, 98, 67]
total = 0
for score in scores:
total += score
print('平均成績:', total / len(scores))
"""
1.增(添加列表元素)
a.append
列表.append(元素) - 在指定的列表的最后添加指定的元素(注意:這個操作不會產生新的列表)
b.insert
列表.insert(下標, 元素) - 在指定的下標前插入指定的元素(注意:這個操作不會產生新的列表)
"""
moves = ['毒液', '功夫熊貓', '肖生克的救贖', '這個殺手不太冷', '拯救大兵瑞恩']
animes.append('一拳超人')
print(animes)
animes.insert(2, '犬夜叉')
print(animes)
animes.insert(0, '進擊的巨人')
print(animes)
"""
2.刪(刪除元素)
a.del
del 列表[下標] - 刪除列表中指定下標對應的元素
注意: del是python中的關鍵字, 可以用它刪除任何數(shù)據(jù)
這兒的下標不能越界
# 1.del
del animes[-2]
print(animes)
# del animes[100] # IndexError: list assignment index out of range
b.remove
列表.remove(元素) - 刪除列表中第一個指定元素
注意: 被刪除的元素在列表中必須是存在的
animes.remove('海賊王')
print(animes)
# animes.remove('死神') ValueError: list.remove(x): x not in list
c.pop
列表.pop() - 將列表中最后一個元素從列表中取出, 會返回取出來的元素
列表.pop(下標) - 將列表中指定下標對應的元素從列表中取出, 會返回取出來的元素
"""
del_item = animes.pop()
print(animes, del_item)
del_item = animes.pop(0)
print(animes, del_item)
#練習: 用一個列表統(tǒng)計一個班的學生年齡(控制臺不斷輸入年齡值,直到輸入end為止), 然后刪除所有小于18歲的年齡
[18, 20, 16, 15, 23]
[18, 20, 23]
思考過程:
ages = [] # 空列表,保存年齡
1.產生年齡
age = input('年齡:')
while age != 'end':
輸入一個年齡就往列表中添加一個
ages.append(int(age))
輸入下一個年齡
age = input('年齡:')
坑一: 遍歷列表刪除部分元素,刪不全! --- 遍歷的時候對原列表切片
"""
ages = [12, 13, 20, 18, 30]
age = 12 12 < 18: ages.remove(12)
ages = [13, 20, 18, 30]
age = 20 20 < 18
age = 18 18 < 18
age = 30 30 < 18
"""
ages = [12, 13, 20, 18, 30]
temp = ages[:]
for age in temp:
if age < 18:
ages.remove(age)
print(ages)
簡寫
ages = [12, 13, 20, 18, 30]
for age in ages[:]:
if age < 18:
ages.remove(age)
print(ages)
# 將小于18歲的拎出來,存到一個新的列表中
"""
ages = [30,12, 13, 20, 18, 30, 10]
index = range(6) = 0 ~ 5
index = 0 age = 12 ages = [13, 20, 18, 30, 10]
index = 1 age = 20 ages = [13, 20, 18, 30, 10]
index = 2 age = 18
index = 3 age = 30
index = 4 age = 10 ages = [13, 20, 18, 30]
index = 5 越界!
"""
ages = [12, 13, 20, 18, 30, 10]
for index in range(len(ages)):
age = ages[index]
if age < 18:
ages.pop(index)
print(ages)
ages = [12, 13, 20, 18, 30, 10]
new_ages = [] # 保存被刪除的元素
index = 0
while index < len(ages):
age = ages[index]
if age < 18:
del_item = ages.pop(index)
new_ages.append(del_item)
else:
index += 1 # 不需要刪除的時候下標才增加
print(ages, new_ages)
# 坑二: 通過下標遍歷列表,刪除元素的時候,下標越界和元素獲取不
# -- 解決辦法:下標對應的元素需要刪除,下標值不動;不會刪除下標加1
"""
3.改(修改元素的值)
列表[下標] = 新值 -- 修改列表中指定下標對應的值
"""
list1 = [1, 2, 3]
list1[0] = 'abc'
print(list1)
# 練習: 有一個列表中保存的是學生的成績,要求將列表中成績小于60分的改成'下一個班見',
# 并且統(tǒng)計下一個班見的學生的個數(shù)
scores = [90, 78, 50, 77, 23, 82, 45]
count = 0
for index in range(len(scores)):
if scores[index] < 60:
scores[index] = '下一個班見'
count += 1
print(scores, count)
"""
1.相關運算:
a.數(shù)學運算
列表1+列表2 - 將兩個列表中的元素合并在一起產生一個新的列表
列表*N - 列表中的元素重復N次,產生一個新的列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(list1 + list2, list1)
print(list1*2)
b.支持比較運算
比較大小的原理和字符串類似
"""
print([1, 2, 3] == [2, 1, 3]) # False
print([1, 2, 3] == [1, 2, 3]) # True
# 了解!
print([1, 2, 3, 4] > [2, 3]) # False
print([10, 20, 2] > [10, 3]) # True
"""
- in / not in
元素 in 列表 - 判斷列表中是否存在指定的元素
"""
print([1, 2] in [1, 2, 3]) # False
print([1, 2] in [[1, 2], 30, 'abc']) # True
print('abc' in [10, 'abc', True]) # True
"""
- len
len(列表) - 獲取列表中元素的個數(shù)
"""
print(len([[1, 'a'], 2, '100', True]))
"""
4.list
list(數(shù)據(jù)) - 將其他數(shù)據(jù)轉換成列表;只有序列才可以轉換成列表,并且所有的序列都能轉化成列表;
轉換的時候就是將序列中所有的元素轉換成列表的元素
"""
# list = 10 # 注意:不能python給我們提供的類型的名字來命名,否則會有隱患
list1 = list('hello')
print(list1)
list2 = list(range(11, 21))
print(list2)
"""
5.序列其他方法
max(序列) - 獲取序列中值最大的元素
min(序列) - 獲取序列中值最小的元素
sum(序列) - 求序列中所有元素的和
注意:以上三個方法,要求序列中的元素類型必須一致, 并且這個類型支持比較運算和加法運算(一般數(shù)字序列用)
"""
print(max([19, 89, 999, 2, 0.2]))
print(min([19, 89, 999, 2, 0.2]))
print(sum([19, 89, 999, 2, 0.2]))
print(sum(range(101)))
list1 = [1, 2, 3, 1, 100, 20, 30, 1]
print(list1.count(1))
list1.extend(['abc', 100])
print(list1)
list1.extend('abc')
print(list1)
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
print(list1.index(100))
list1.reverse()
print(list1)
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort()
print(list1)
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort(reverse=True)
print(list1)
list1.clear()
print(list1)
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list2 = list1.copy()
list3 = list1[:]
print(list2, list3)
print(id(list1), id(list2), id(list3))