有人可以解释为什么我在 sympy.Set() 上出错

can someone explain why i'm getting an error on a sympy.Set()

作品:

    import sympy as sp
    import pandas as pd
    
    test = pd.DataFrame( {'greeting':['hey','hi','hello','howdy']} )
    test1['greeting'].map(lambda x: sp.Set(*x).is_proper_subset( sp.Set(*x) ))

无效:

    import sympy as sp
    import pandas as pd
    
    test = pd.DataFrame( {'greeting':['hey','hi','hello','howdy']} )
    test1['greeting'].map(lambda x: sp.Set('hi',).is_proper_subset( sp.Set(*x) ))```

我得到:

AttributeError: 'str' object has no attribute 'args'

我也试过在另一个数据帧上使用数字:

test['triplets'].map(lambda x: sp.Set(*(813,)).is_proper_subset( sp.Set(*x) ))

我得到了相同的结果。

https://docs.sympy.org/latest/modules/sets.html

class sympy.sets.sets.Set(*args)[source]¶
The base class for any kind of set.

好的...为什么当我通过 lambda 传递它时它对每个系列值都起作用,但当我手动编写它时却不起作用

注意:我的最终目标是将它放在一个 for 循环中,迭代被传递到我有 'hi'

的地方

我不知道交易是什么,我希望有一个答案 - 但在那之前,我已经求助于此:

test1['greeting'].map(lambda x: set('hi').issubset(set(x)) and set('hi')!=set(x))

来自 sympy 的 Set documentation:

class sympy.sets.sets.Set(*args)[source]¶ This is not meant to be used directly as a container of items. It does not behave like the builtin set; see FiniteSet for that.

主要问题是 is_proper_subset 用于“集合”的间隔类型。它似乎不能很好地处理更简单的集合,但给出了一个相当神秘的错误消息。调试时,往往有助于尽可能减少问题:


import sympy as sp

sp.Set(1, 2).is_proper_subset(sp.Set(1, 2, 3))

这会引发错误 AttributeError: 'int' object has no attribute 'args'

同样:

sp.Set('a', 'b').is_proper_subset(sp.Set('a', 'b', 'c'))

通向 AttributeError: 'str' object has no attribute 'args'

原始问题的最佳解决方案是使用标准 python 函数。