python 中的独特功能

Unique function in python

for i in df["col"].unique():
   ...

这里 unique 函数在每次循环迭代后调用,还是只调用一次并将结果存储在内存中??

问这个只是为了检查 unique 函数是否在每次迭代后执行,那么即使在下一次迭代中 i 也有可能与上一次迭代相同。

Ex 第一次 unique 函数被调用然后 df["col"].unique() 给出 [1,2] 所以 i 在第一次迭代和第二次迭代中为 1 unique 函数再次调用并且 i 可能会再次获得 1 作为值。

您使用的构造首先计算 .unique() 函数并使用该函数的结果(如果可迭代)进行循环。

如果您希望循环每次迭代都对函数求值,您可以使用如下结构:

list = [x.function() for x in items]

查看此 link 了解更多信息: https://opensource.com/article/18/3/loop-better-deeper-look-iteration-python

这是一个快速代码示例,可以了解它是如何工作的:

df = pd.DataFrame(0, index=np.arange(2), columns=['1','2'])
df.iloc[0][0]=1
for i in df['1'].unique():
    print(f'unique values : {i}')
    print(df)
    df.iloc[1][0]=2

首先,我们创建一个 2x2 零数据帧,在 [1][1] 位置有一个 1 :

    1   2
0   1   0
1   0   0

然后我们调用 unique 来获取第 1 列的所有唯一值(即 0 和 1)。 在循环期间,我们更改第 1 列(我们迭代的那个)单元格的值之一。但是正如您在输出中看到的那样,它没有在循环中添加任何迭代。 这意味着 df.unique() 在迭代之前存储结果,就像 MdBrainz 所说的那样,并且在循环期间修改值不会改变循环迭代的次数。

输出:

unique values : 1
   1  2
0  1  0
1  0  0
unique values : 0
   1  2
0  1  0
1  2  0