鱼C论坛

 找回密码
 立即注册
查看: 1306|回复: 0

[学习笔记] 序列-下

[复制链接]
发表于 2023-3-6 22:23:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> # all() 函数是判断可迭代对象中是否所有元素的值都为真;
>>> # any() 函数则是判断可迭代对象中是否存在某个元素的值为真。
>>> x = [1, 1, 0]
>>> y = [1, 1, 9]
>>> all(x)
False
>>> all(y)
True
>>> any(x)
True
>>> any(y)
True
>>> # enumerate() 函数用于返回一个枚举对象,它的功能就是将可迭代对象中的每个元素及从 0 开始的序号共同构成一个二元组的列表:
>>> seasons = ["Spring", "Summer", "Fall", "Winter"]
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> for i, j in enumerate(seasons, start=10):
...         print(i, "->", j)
...
10 -> Spring
11 -> Summer
12 -> Fall
13 -> Winter
>>> # enumerate() 有一个 start 参数,可以自定义序号开始的值:
>>> # zip() 函数用于创建一个聚合多个可迭代对象的迭代器
>>> # 将作为参数传入的每个可迭代对象的每个元素依次组合成元组,即第 i 个元组包含来自每个参数的第 i 个元素。

>>> >>>
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> z = [7, 8, 9]
>>> zipped = zip(x, y, z)
>>> list(zipped)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> # 如果传入的可迭代对象长度不一致,那么将会以最短的那个为准:
>>> z = "FishC"
>>> zipped = zip(x, y, z)
>>> list(zipped)
[(1, 4, 'F'), (2, 5, 'i'), (3, 6, 's')]
>>> # 当我们不关心较长的可迭代对象多出的数据时,使用 zip() 函数无疑是最佳的选择,因为它自动裁掉多余的部分。
>>> # 如果那些值对于我们来说是有意义的,我们可以使用 itertools 模块的 zip_longest() 函数来代替:
>>> import itertools
>>> zipped = itertools.zip_longest(x, y, z)
>>> list(zipped)
[(1, 4, 'F'), (2, 5, 'i'), (3, 6, 's'), (None, None, 'h'), (None, None, 'C')]
>>> # map() 函数会根据提供的函数对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器:
>>> mapped = map(ord, "FishC")
>>> list(mapped)
[70, 105, 115, 104, 67]
>>> # 如果指定的函数需要两个参数,后面跟着的可迭代对象的数量也应该是两个:
>>> mapped = map(pow, [2, 3, 10], [5, 2, 3])
>>> list(mapped)
[32, 9, 1000]
>>> [pow(2, 5),pow(3, 2), pow(10, 3)]
[32, 9, 1000]
>>> # 如果可迭代对象的长度不一致,那么 Python 采取的做法跟 zip() 函数一样,都是在最短的可迭代对象终止时结束:
>>> list(map(max, [1, 3, 5], [2, 2, 2], [0, 3, 9, 8]))
[2, 3, 9]
>>> # 与 map() 函数类似,filter() 函数也是需要传入一个函数作为参数,不过 filter() 函数是根据提供的函数,对指定的可迭代对象的每个元素进行运算,并将运算结果为真的元素,以迭代器的形式返回:
>>> filter(str.islower, "FishC")
<filter object at 0x010EE490>
>>> # 上面代码我们传入的是字符串的 islower() 方法,作用就是判断传入的参数是否为小写字母,结合到 filter() 函数中使用,就是剔除大写字母,保留小写字母的作用。
>>> # 如果提供的函数是 None,则会假设它是一个 “鉴真” 函数,即可迭代对象中所有值为假的元素会被移除:
>>> list(filter(None, [True, False, 1, 0]))
[True, 1]
>>> # 可迭代对象和迭代器最大的区别是:可迭代对象咱们可以对其进行重复的操作,而迭代器则是一次性的!
>>> # 将可迭代对象转换为迭代器:iter() 函数
>>> x = [1, 2, 3, 4, 5]
>>> y = iter(x)
>>> type(x)
<class 'list'>
>>> type(y)
<class 'list_iterator'>
>>> next(y)
1
>>> next(y)
2
>>> next(y)
3
>>> next(y)
4
>>> next(y)
5
>>> next(y)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> z = iter(x)
>>> next(z, "没啦,被你掏空啦~~")
1
>>> next(z, "没啦,被你掏空啦~~")
2
>>> next(z, "没啦,被你掏空啦~~")
3
>>> next(z, "没啦,被你掏空啦~~")
4
>>> next(z, "没啦,被你掏空啦~~")
5
>>> next(z, "没啦,被你掏空啦~~")
'没啦,被你掏空啦~~'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-2 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表