#生成器函數
def f():
a, b = 1, 1
while 1:
yield a #暫停執行,需要時再產生一個新的元素
a, b = b, a+b
#這樣做可以節省內存,而不用開list保存所有的中間結果
#也不必要一次性print所有中間結果
a = f()
for i in range(10):
print(a.__next__(),end = ' ') #__next__迭代器方法
#Answer:1 1 2 3 5 8 13 21 34 55
a = f()
b = next(a)
print(b)
b = next(a)
print(b)
b = next(a)
print(b)
#pass
#Answer:
#1
#1
#2 處於yield
#迭代器
class Fab(object):
def __init__(self, max):
self.max = max
self.n, self.max, self.b = 0, 0, 1
def __iter__(self):
return self
def __next__(self):#py3.*需寫成__next__,for循環中自動調用__next__()
if self.n < self.max:
r = self.b
self.max, self.b = self.b, self.a + self.b
self.n = self.n + 1
return r
raise StopIteration() #拋出異常表示迭代結束
for item in Fab(10): #迭代器訪問
print(item, end = ' ')
#Answer:1 1 2 3 5 8 13 21 34 55
def count(start , step):
num = start
while True:
yield num
num += step
x = count(3, 5) #目前的x是迭代器對象
for i in range(10):
print(next(x),end = ' ')
print()
#Answer:3 8 13 18 23 28 33 38 43 48
def demo(*para):
average = sum(para)/len(para)
#print(average)
g = [i for i in para if para[i] > average]
return [average,] + list(g) #返回列表
g = demo(1,2,3,3,3,4,4,5,3,6,1,2,3,3,5,2,1,3)
print(g)
#Answer:[3.0, 5, 6, 5]
def demo(*para):
average = sum(para)/len(para)
#print(average)
g = [i for i in para if para[i] > average]
return (average,) + tuple(g) #返回元組
g = demo(1,2,3,3,3,4,4,5,3,6,1,2,3,3,5,2,1,3)
print(g)
#Answer:(3.0, 5, 6, 5)
def get_A(s):#統計一個字符串的大寫字母數量和小寫字母數量
x, y = 0, 0
for i in range(len(s)):
if s[i] >= 'A' and s[i] <= 'Z':
x += 1
elif s[i] >= 'a' and s[i] <='z':
y += 1
return (x, y)
str = "aoewinawioneAOWENOAINWEOITsswoinfaoinwe"
g = get_A(str)
print(g)
#Answer:(14, 25)
def demo(s):#函數等價於上述函數
g = [0, 0]
for ch in s:
if ch.islower():
g[1] += 1
elif ch.isupper():
g[0] += 1
return tuple(g)
str = "aoewinawioneAOWENOAINWEOITsswoinfaoinwe"
g = demo(str)
print(g)
def reversek(s, k):#給一個字符串s,給一個下標k,實現k之前元素逆序,k之後元素逆序,再整體逆序
r = len(s)
for i in range (0 , k):
if i > k / 2:
break
s[i], s[k - 1 - i] = s[k - 1 - i], s[i]
for i in range (k , r):
if(i > (r + k) / 2):
break
s[i], s[r - 1 - i] = s[r - 1 - i], s[i]
for i in range (0 , r):
if(i > r / 2):
break
s[i], s[r - 1 - i] = s[r - 1 - i], s[i]
return s
str1 = [1,2,3,4,5,6,7,8,9] #str類型不能被搞來搞去,所以這裏改成了列表
ans_str = reversek(str1 , 3)
print(str1)
def reverseK(s, k):#同上述函數
x = s[0 : k-1 : -1] #切片操作並反轉
y = s[k-1 : -1 : -1] #切片操作並反轉
return list(reversed(x + y))
str1 = [1,2,3,4,5,6,7,8,9] #str類型不能被搞來搞去,所以這裏改成了列表
ans_str = reversek(str1 , 3)
print(str1)
Python 基本結構類型基礎實戰【生成器函數、迭代器、切片】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.