前言
此處主要記錄關於Python字符串的一些便利操作。
使用生成器函數實現可迭代對象
在 Python 中,一邊循環一邊計算的機制,稱爲生成器(Generator);
生成器是一個返回迭代器的函數,只能用於迭代操作
;
(yield就是專門給生成器用的return)
生成器函數
def gen():
print('1')
yield '111111'
print('2')
yield '222222'
print('3')
yield '333333'
g = gen()
print(g) # <generator object gen at 0x0026BBF0>
next(g) # 1
next(g) # 2
next(g) # 3
next(g, 'over')
實現可迭代對象
class PrimeNumbers:
def __init__(self,start,end):
self.start = start
self.end = end
def isPrimeNum(self,k):
if k < 2:
return False
for i in range(2,k):
if k % i == 0:
return False
return True
def __iter__(self):
for k in range(self.start,self.end+1):
if self.isPrimeNum(k):
yield k
for x in PrimeNumbers(1,100):
print(x)
主要用於一邊處理數據一邊顯示該條結果。
進行反向迭代
reversed(l)
# 列表的方向迭代器
class FloatRange:
def __init__(self,start,end,step=0.1):
self.start = start
self.end = end
self.step =step
def __iter__(self):
t = self.start
while t <= self.end:
yield t
t += self.step
def __reversed__(self):
t =self.end
while t >= self.start:
yield t
t -= self.step
# 正向迭代
for x in FloatRange(1.0,4.0,0.5):
print(x)
# 反向迭代
for x in reversed(FloatRange(1.0,4.0,0.5)):
print(x)
迭代器切片
不支持負數操作,到末尾第三個參數爲None
from itertools import islice
l = range(20)
t = iter(l)
for x in islice(t,5,10):
print(x)
迭代多個對象
並行迭代
from random import randint
chinese = [randint(60,100) for x in range(40)]
math = [randint(60,100) for x in range(40)]
english = [randint(60,100) for x in range(40)]
total = []
for c,m,e in zip(chinese,math,english):
total.append(c+m+e)
print(total)
串行迭代
from itertools import chain
a = (1,2,3)
b = ['a','c','d']
for i in chain(a,b):
print(i)