目標:代碼越少越好
1.切片
1).功能:直接選擇list或tuple中的子元素。
2).優點:代替循環,減少代碼量
3).實現:list[首元素位置:尾元素位置:間隔選擇數],tuple(首元素位置:尾元素位置:間隔選擇數),list[1,2,3,4,5]
- 首元素位置:需要選擇的首元素索引值,當從0開始時可忽略即,list[:尾元素位置:間隔選擇數]
- 尾元素位置:需要選擇的尾元素索引值,實際選擇不包括尾元素索引值即,list[1:4],一共選擇4-1=3個元素,2,3,4
- 間隔選擇數:格幾個選擇一個元素,例如,list[::2],結果爲1,3,5,其中list[:]表示選擇全部元素
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3] ['Michael', 'Sarah', 'Tracy',]
>>> L[-2:] #也可以倒着索引 倒數第一個索引爲-1 ['Bob', 'Jack'] >>> L[-2:-1] ['Bob']
>>> L[::2] #選擇索引值爲偶數的
['Michael', 'Tracy','Jack']
2.迭代
1).定義:如果給定一個list或tuple,通過for循環來遍歷這個list或tuple,這種遍歷我們稱爲迭代(Iteration)
2).優點:沒有索引也可以迭代,list、tuple、dict、set都可以,連字符串也行
3).實現:
- list: 迭代值和索引均可,和tuple、set類似
>>> list = ['A', 'B', 'C']
>>> for value in list:
... print(value)
...
A
B
C
>>> for i, value in enumerate(['A', 'B', 'C']): #實現下標循環 ... print(i, value) ... 0 A 1 B 2 C
- dict:迭代key、value均可。key:for key in d,value:for value in d.values(),同時迭代key和value:for k, v in d.items()
>>> d = {'a': 1, 'b': 2, 'c': 3} >>> for key in d: ... print(key) ... a c b
- 判斷是否可迭代:通過collections模塊的Iterable類型判斷:
>>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整數是否可迭代 False
3.列表生成式
1).功能:可以快速生成list,可以通過一個list推導出另一個list,而代碼卻十分簡潔
2).實現:條件循環和多層循環
- 條件循環:要生成的元素
x * x
放到前面,後面跟for
循環,循環後面加if判斷 if和x*x都可以省#轉成小寫字母
>>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']
# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None] #非全是字母,可根據isinstance判斷
L2 = [s.lower() for s in L1 if isinstance(s,str)]
# 測試:
print(L2)
if L2 == ['hello', 'world', 'apple']:
print('測試通過!')
else:
print('測試失敗!')>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] 列表生成式 #等價於下面代碼 >>> L = [] >>> for x in range(1, 11): ... if x%2 == 0 ... L.append(x * x) ... >>> L [4, 16, 36, 64, 100] >>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']
多層循環: 可以實現多層循環,也可以循環多個變量
#兩層循環,實現全排列
>>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']
4.生成器
1).定義:當生成很多元素時,列表生成式佔用空間大,如果僅僅需要訪問前幾個元素,後面的空間就浪費了,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱爲生成器:generator。
2).優點:減少空間佔用,節約空間。
3).實現: