Python中的序列、序列的通用方法、迭代器和生成器

本文介绍了Python中的序列类型如列表、元组和字符串,并详细阐述了序列的通用方法,包括转换、长度计算、求最大值和最小值、求和、排序以及翻转等操作。此外,还讲解了迭代器的概念,强调其只能向前遍历的特点,以及如何通过`iter()`和`next()`方法进行操作。最后,深入探讨了生成器的功能,展示了如何使用`yield`保留迭代过程中的数据并创建迭代器。示例中给出了斐波那契数列的生成器实现。
摘要由CSDN通过智能技术生成

Python003: Python中的序列、序列的通用方法、迭代器和生成器

  • 序列
列表、元组、字符串都属于序列的范畴
  • 序列: 通用的方法
# 将序列转为list
a = list("DongZhaocheng")
>>>a = ['D', 'o', 'n', 'g', 'Z', 'h', 'a', 'o', 'c', 'h', 'e', 'n', 'g']

# 将序列转化为元组
a = tuple("DongZhaocheng")
>>>a = ('D', 'o', 'n', 'g', 'Z', 'h', 'a', 'o', 'c', 'h', 'e', 'n', 'g')

# 将某个对象转化为字符串 str()
>>>a = str(100)
>>>a
100
>>>type(a) 
<class, 'int'>

# 返回参数的长度 len()
# 字符串是字符数,元组和序列是元素个数
>>>list1 = [1,2,3,4,5]
>>>len(list1)
5

# 求序列中的最大值 max()
# 求序列中的最小值 min()
# 应用上述方法,需要保证参数数据类型统一

# 返回序列的总和,如果有第二个参数,将计算总和再加上start
# sum(序列 [, start])
>>>t01 = (1,2,3,4,5)
>>>sum(t01)
15
>>>sum(t01,10)
25

# 返回一个排序的列表sorted()
# 类似于list的内建函数sort()
sort()用于原地排序
sorted()用于返回一个排序后的列表

# 返回序列的翻转
# 类似于list的内建函数reverse()
reverse()用于对一个序列原地翻转
reversed()是返回一个翻转后的迭代器对象

# 生成由二元组构成的可迭代对象
# 参数是序列 enumerate()
>>>ls = ['董照诚', '董小虎', '董大虎']
>>>for each in enumerate(ls):
...    print(each)
(0, '董照诚')
(1, '董小虎')
(2, '董大虎')

# 生成由可迭代参数平行组合而成的元组
# 不一定是二元组,有几个参数就是几元组
>>>ls = ['董照诚', '董小虎', '董大虎']
>>>lz = (1,2,3)
>>>str = "asd"
>>>for each in zip(ls,lz,str):
...    print(each)
('董照诚', 1, 'a')
('董小虎', 2, 's')
('董大虎', 3, 'd')

# 即使参数不一样,函数的执行也不会失败,但是会被相应的截断
  • 迭代器: 本质是一个数据对象
# 迭代器是一个可以记住遍历的位置的对象
# 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
# 迭代器有两个基本的方法:iter() 和 next()
# iter()用于创建迭代器对象
# next()输出迭代器的下一个元素

>>>t01 = (1,2,3,4,5)
>>>a = iter(t01)
>>>a
<tuple_iterator object at 0x000001C710276848>
>>>next(a)
1
>>>next(a)
2
>>>next(a)
3
>>>next(a)
4
>>>next(a)
5

# 字符串,列表或元组对象都可用于创建迭代器

# 如果要把一个类作为一个迭代器,需要在类中实现一个迭代器必须要具备的方法: iter()和next()
  • 生成器: 本质是一个函数
# 我们知道,一个函数的执行,最终可以返回一个数值;
# 假如函数内部执行了一个迭代(比如for循环或while循环)
# 在循环过程中,会出现某些变量的迭代,但是这些迭代过程中的数据都被后来的数据给覆盖了没有保存
# 如何才能将这些迭代过程中的数据保存呢?----yield函数
#-----------------------------------------------------------------------------#
# 在Python中使用了yield的函数,将不再是一个函数,因为yield会将本次迭代的某些变量的值保存
# 具体是哪些值,可以自己选择,函数内的循环执行完之后,经过yield保存的数据就会形成一个"列表"
# 最终该函数返回的是一个迭代器对象,其内部保存了每次迭代的数据

import sys
 
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()
        
# 结果
0 1 1 2 3 5 8 13 21 34 55
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡与乌龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值