当我在 python 中研究推荐系统(RS)时,我遇到了一个严重的问题:我无法在不更改其顺序的情况下访问该集合。
例如,一旦我更改了一组以列出的顺序就会更改。(在推荐中,系统顺序非常重要。)
final_prediction=set(df_final)-set(df1)
例如
>>> df_final=['a','x','z','p','s','j','b']
>>> df1=['b','j']
>>> set(df_final)-set(df1)
{'p', 'a', 's', 'z', 'x'}
Run Code Online (Sandbox Code Playgroud)
这里df_final
和df1
都是分类变量
尽管我使用了其他方法,但我不得不费尽心思来更改代码,因为它使用设置的东西给出了完美的结果,并且所有其他东西都工作正常。我正处于 RS 的最后阶段,但由于设定的顺序,我不得不采取其他方法。
我们如何在不改变顺序的情况下访问集合?
set
是一个无序集合。对于有序集合,您可以使用list
或tuple
。您现在有几个选择。您的选择应该取决于您是否期望在 中重复df_final
。如果没有重复,可以使用列表理解:
df1_set = set(df1)
res1 = [i for i in df_final if i not in df1_set]
# ['a', 'x', 'z', 'p', 's']
Run Code Online (Sandbox Code Playgroud)
如果您在 中有重复项df_final
,那么您需要保持顺序的独特项目。为此,您可以使用toolz.unique
,这相当于文档unique_everseen
中找到的配方:
from toolz import unique
res2 = [i for i in unique(df_final) if i not in df1_set]
Run Code Online (Sandbox Code Playgroud)