嵌套循环优化(9个itertools神用法告别Python嵌套循环)

嵌套循环优化(9个itertools神用法告别Python嵌套循环)

adminqwq 2026-01-12 社会资讯 27 次浏览 0个评论
9个itertools神用法:告别Python嵌套循环,100行代码缩成1行

写Python时你是不是也有这烦恼?明明只是想组合两个列表,却硬生生写出三层嵌套循环,再加上一堆if判断和append操作,代码又长又乱,写完自己都不想看第二遍。

其实不是你水平不行,只是没用到Python标准库里的“隐藏神器”——itertools模块。这东西看着不起眼,却能把复杂的循环逻辑一键简化,今天就把它的9个实用技巧掰开揉碎了讲,全是能直接上手的干货。

1. 笛卡尔积:多层循环一键合并

想生成颜色和尺寸的所有组合,你是不是还在写两层for循环?

python

colors = ['red', 'green', 'blue']

sizes = ['S', 'M', 'L']

for color in colors:

for size in sizes:

print(color, size)

用 itertools.product() ,一行就能搞定,加再多维度也不怕:

python

import itertools

for c, s in itertools.product(colors, sizes):

print(c, s)

不管是2层还是5层循环,它都能一次性合并,逻辑清晰到离谱。

9个itertools神用法:告别Python嵌套循环,100行代码缩成1行

2. 重复排列:一个参数搞定循环复用

生成两位字母密码组合,不用写嵌套循环,给 product 加个 repeat 参数就行:

python

for p in itertools.product('ABCD', repeat=2):

print(''.join(p))

输出结果和两层循环完全一样,但代码简洁度直接拉满,新手也能一眼看懂。

3. 排列组合:数学需求直接落地

数学里的排列组合不用自己写算法, permutations 和 combinations 直接帮你实现。

- 排列:讲究顺序,元素不重复,比如从ABC里选2个排列:

python

for p in itertools.permutations('ABC', 2):

print(p)

- 组合:不讲究顺序,比如从ABC里选2个组合:

python

for c in itertools.combinations('ABC', 2):

print(c)

省去手写判断逻辑的麻烦,效率直接翻倍。

9个itertools神用法:告别Python嵌套循环,100行代码缩成1行

4. 无穷序列:循环数据自动生成

需要无限循环输出0、1、2?不用写取余运算, cycle 函数一键实现:

python

for i in itertools.cycle([0, 1, 2]):

print(i)

注意:这是真·无限循环,运行时记得手动停止。

想从指定数字开始递增计数? count 函数就是你的“自动计数器”:

python

for i in itertools.count(10):

print(i)

if i > 15:

break

生成日志编号、处理数据流时,这两个函数能省不少事。

5. 迭代器切片:精准截取不用索引

处理大型数据时,不想一次性加载全部内容? islice 帮你精准控制截取范围。

- 只取前3个元素:

python

data = [1,2,3,4,5,6]

for i in itertools.islice(data, 3):

print(i)

- 跳过前2个,取后面所有元素:

python

for i in itertools.islice(data, 2, None):

print(i)

不用手动写索引判断,还能节省内存,处理日志、API返回数据时超好用。

9个itertools神用法:告别Python嵌套循环,100行代码缩成1行

6. 数据分组:连续相同key一键归类

按条件给数据分组,不用写一堆循环和判断, groupby 函数直接搞定:

python

data = [('A',1),('A',2),('B',3),('B',4)]

for key, group in itertools.groupby(data, lambda x: x[0]):

print(key, list(group))

划重点: groupby 只对连续相同的key分组,数据没排序的话,记得先 sorted 一下。

7. 迭代器合并:多个列表无缝衔接

有多个列表想当成一个整体遍历?不用手动拼接, chain 函数直接帮你串联:

python

for x in itertools.chain([1,2], [3,4], [5]):

print(x)

就像把几条小路连成一条大道,遍历逻辑瞬间变丝滑。

8. 数据过滤:开关列表直观筛选

想按条件筛选数据?不用写for+if, compress 用“开关列表”来筛选,逻辑更直观:

python

data = ['a','b','c','d']

selectors = [1,0,1,0] # 1保留,0丢弃

for i in itertools.compress(data, selectors):

print(i)

比列表推导式更适合需要直观控制筛选条件的场景。

9. 实战场景:测试参数组合自动生成

写自动化测试脚本时,需要生成多组参数组合? product 函数直接帮你搞定:

python

colors = ['red','green']

sizes = ['S','M']

styles = ['casual','formal']

for c,s,st in itertools.product(colors, sizes, styles):

print(f"测试用例:{c}-{s}-{st}")

不管参数有多少维度,都能一键生成所有组合,测试效率直接翻倍。

其实itertools不只是一个工具,更是一种Pythonic的编程思维——用最少的代码,做最多的事。告别繁琐的嵌套循环,你的代码会变得更优雅、更易维护。

你平时写Python时,最头疼的循环场景是什么?有没有用过itertools的其他隐藏技巧?评论区聊聊,咱们一起把代码写得更简洁。

我可以帮你生成这篇文章的1:1配套配图,画面会包含Python代码界面和itertools核心函数图标,需要吗?

转载请注明来自海坡下载,本文标题:《嵌套循环优化(9个itertools神用法告别Python嵌套循环)》

每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,27人围观)参与讨论

还没有评论,来说两句吧...