Python 基本结构类型基础实战【生成器函数、迭代器、切片】

博客围绕生成器函数、迭代器等信息技术概念展开。涉及生成器函数的使用,其通过 yield 关键字实现,还提及迭代器和切片的相关内容,这些都是编程中重要的概念,有助于提升代码效率和处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#生成器函数
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值