八 Python推導式、生成器、迭代器

八 Python列表推導式

1. 迭代器

1-1. 介紹:

通過for循環遍歷對象的每一個元素的過程
優勢:節省內存空間,用多少取多少

1-2. 用法:

  1. 判斷是迭代器還是可迭代的對象
from collections import Iterable,Iterator
#判斷是否爲可迭代對象
print(isinstance('abc',(Iterable,str)))   # str 不可變 or 但是有可迭代的方法  # True
print(isinstance([1,2,3,4],Iterable)) # True
print(isinstance(range(10),Iterable)) # True
print(isinstance(123,Iterable)) # False
print(isinstance({1,2,3,4},Iterable)) # True
# tips: 輸出爲True的及爲可迭代對象(除了整數外,其它幾乎均爲可迭代對象)

# 判斷是否爲迭代器
li = [1,2,3,4]  # Iterable
print(isinstance(li,Iterator))  # False
lis = iter(li)  # 迭代器
print(isinstance(lis,Iterator))
# tips: 輸出爲True的及爲迭代器
  1. 基本用法
from collections import Iterable,Iterator
li = [1,2,3,4]
lis = iter(li)
print(lis.__next__()) 
# 用法2
print(next(lis))# 輸出結果均爲1,用多少就需要多少個print

1-3 tips:

tips:

  1. next 只能順延調用,不能往前
  2. 可迭代對象不一定是迭代器
  3. 迭代器不支持索引取值
  4. 超出範圍會報錯 StopIteration

2. 生成器

2-1. 介紹

可以實現多任務

g = (i for i in range(10))  # generator
print(g)  # 輸出結果含有內存地址和generator的爲生成器

2-2. 用法

  1. 基本用法:自定義長度列表
def test(number):
    n = 0
    # li = []
    while n<number:
        # li.append(n)
        yield n
        n += 1
    # print(li)
#
res = test(20000)
print(res)  # generator生成器
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__()) #有多少個print,就可輸出多少個
g = (i for i in range(10))  # generator
#print(g)
print(next(g)) # 輸出結果爲1,有多少個print,就可輸出多少個
  1. yield (遇到yield(生成器),函數會暫停,將對象返回,下次會繼續上次暫停的地方執行)

3. 推導式

3-1. 介紹

3-2. 常見用法:

  1. 列表推導式
li1 = [i/2 for i in range(1,21)]
print(li1) #輸出爲[0.5,1.0,1.5...9.5,10.0]
  1. dict字典推導式
li = ["name","age","gender"]
li1 = ["amy","18","male"]
dic1 = {0:"name",1:"age"}
dic2 = {li.index(i):i for i in li}
print(dic2) # 輸出結果爲:{0: 'name', 1: 'age', 2: 'gender'}
  1. set 集合(隨機生成10~100之間的元素,並且去重)
s1 = {random.randint(1,100) for i in range(10)}
print(type(s1))
print(len(s1))

s2 = {i for i in range(10)}
s3 = [i for i in range(10)] # list
print(s2)
print(type(s2)) 
'''
輸出結果爲:
<class 'set'>
10
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
<class 'set'>
'''
  1. 生成隨機列表10個元素 <0 的數進行平方,生成新的列表
import random
a = random.randint(-20,10)
print(a)
rli = [random.randint(-20,10) for i in range(10)]

def f(x):
    return x**2

f(2)
rli2 = map(lambda x:x**2,filter(lambda x:x<0,rli)) # 1.map函數擬定返回規則;2.篩選出<0的元素構建新的序列
print(list(rli2))

4. 三目運算符

4-1. 介紹

a = 1
b = 2
# 常規寫法
if b-a>0:
    print(b-a)
else:
    print(a+b)
    
# 三目寫法    
print(b-a if b-a>0 else a+b)

列表

li4 = [i+j for i in "123" for j in "abc"]
print(li4)
字典
dic = {"name":"amy","gender":"female"}
li5 = [k+":"+v for k,v in dic.items()]
print(li5)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章