【摸鱼笔记】了解itertools,优雅处理list

背景

迭代器(Iterator)在 Python 中是一种很常用的数据结构;

相比 list ,迭代器最大的优势就是只有当迭代到某个值时才会计算这个值的结果,避免占用不必要的内存,

所以面对大型的数据集时,迭代器一般比 list 效率更高;

itertools 就是用来操作迭代器的 Python 内置模块。

简介

itertools 库是 Python 中处理迭代操作的标准工具,

在处理序列和集合时,它可以像函数式编程过程一样,在处理过程中直接过滤内容,

并且在组合处理其他序列或集合时,无需显式地创建中间序列或集合,

可以显著提高代码的开发效率和可读性。

示例:itertools 各方法使用

itertools.count(start=0, step=1)

根据传入的参数生成无限长的一串数值;

start: 指定迭代开始值,默认为 0;

step: 指定迭代的步长,默认为 1;

示例

import itertools

for i in itertools.count(start=2, step=2):
    if i > 12:
        break
    print("count 输出", i)

运行结果

count 输出 2
count 输出 4
count 输出 6
count 输出 8
count 输出 10
count 输出 12

itertools.cycle(iterable)

从传入的 iterable 中取值,当 iterable 里的值取完,会跳到 iterable 的开头重复取值,一直重复下去;

iterable: 可迭代对象,一般是 list;

示例

import itertools

l = 0

for i in itertools.cycle(range(6)):
    print("cycle 输出", i)
    if l > 8:
        break
    l += 1

运行结果

cycle 输出 0
cycle 输出 1
cycle 输出 2
cycle 输出 3
cycle 输出 4
cycle 输出 5
cycle 输出 0
cycle 输出 1
cycle 输出 2
cycle 输出 3

itertools.repeat(object,times)

将一个对象重复指定次数或者无限次;

object:指定重复的对象;

times:指定重复的次数,如果 times 没有传入,那么是无限次;

示例

import itertools

# 指定重复次数
for i in itertools.repeat("a", 5):
    print("指定重复次数,重复输出:", i)

# 不指定重复次数,无限循环
l = 0

for i in itertools.repeat("b"):
    print("不指定重复次数,输出:", i)
    if l > 6:
        break
    l += 1

运行结果

指定重复次数,重复输出: a
指定重复次数,重复输出: a
指定重复次数,重复输出: a
指定重复次数,重复输出: a
指定重复次数,重复输出: a
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b

itertools.product(*iterables, repeat=1)

返回可迭代对象的笛卡儿积;

这些可迭代对象之间的笛卡儿积,也可以使用 for 循环来实现,

例如 product (A, B) 与 ((x,y) for x in A for y in B) 就实现一样的功能。

*iterables: 一个或多个可迭代对象;

repeat: 可迭代对象的重复次数;

示例

import itertools

# product 输出
for i in itertools.product([1, 2], [3, 4]):
    print("product 输出", i)

# for 循环实现
for i in ((x, y) for x in [1, 2] for y in [3, 4]):
    print</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

The_Singing_Towers

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

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

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

打赏作者

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

抵扣说明:

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

余额充值