如何将结合集合操作的嵌套for循环合并为单个循环?
将嵌套循环合并为单循环的方法
当然可以,你可以利用笛卡尔积的思路,把两个集合的所有组合一次性生成,从而用单个循环遍历。这里提供两种常用方法:
方法1:使用itertools.product
Python标准库的itertools模块里的product函数可以直接生成两个可迭代对象的笛卡尔积,完美替代嵌套循环:
import itertools # 生成month和place唯一值的所有组合,单循环遍历 for j, i in itertools.product(set(df.month), set(df.place)): print(j, i)
方法2:使用pandas的MultiIndex.from_product
如果习惯用pandas原生方法,可以通过生成多索引来实现:
import pandas as pd # 基于两列的唯一值生成多索引,再遍历每一组组合 for j, i in pd.MultiIndex.from_product([df.month.unique(), df.place.unique()]): print(j, i)
两种方法的输出结果和原嵌套循环一致,只是遍历顺序可能略有不同(原嵌套循环是先固定month再遍历place,product默认按传入顺序生成组合),如果需要严格保持原顺序,调整product的参数顺序即可。
内容的提问来源于stack exchange,提问作者Mathew John
相关产品推荐
相关产品推荐

