Python中df['col'].unique()在for循环中的执行次数问题
结论
df["col"].unique() 仅会在for循环启动前调用一次,返回的唯一值序列会被完整存储在内存中作为迭代对象,后续每次循环迭代都会直接从这个已生成的序列中顺序取值,不会重复执行unique函数。
原理说明
这是Python for循环的固定执行逻辑:for 迭代变量 in 可迭代对象的语法中,in关键词后方的表达式只会在循环初始化阶段计算一次,得到可迭代对象后全程复用,不会在每次迭代时重新计算。
你顾虑的「每次迭代重新调用unique导致重复取值」的情况不会发生。哪怕循环过程中df["col"]的内容发生修改,循环迭代的仍然是初始化阶段生成的旧唯一值序列,不受后续DataFrame变更影响。
验证示例
你可以运行以下代码验证该逻辑:
import pandas as pd # 初始化测试DataFrame df = pd.DataFrame({"col": [1, 2, 1, 3]}) iter_count = 0 for val in df["col"].unique(): print(f"当前迭代值:{val}") # 循环过程中修改df,新增重复值 df.loc[len(df)] = {"col": 1} iter_count += 1 print(f"循环总迭代次数:{iter_count}") print(f"循环结束后df列的唯一值:{df['col'].unique()}")
运行输出如下:
当前迭代值:1 当前迭代值:2 当前迭代值:3 循环总迭代次数:3 循环结束后df列的唯一值:[1 2 3]
可以看到哪怕循环中不断新增重复值,迭代次数仍为初始unique返回的3个值,没有重复取值也没有新增迭代次数。
内容的提问来源于stack exchange,提问作者sahil
相关产品推荐
相关产品推荐

