设置奇怪的行为(python)

时间:2015-09-27 15:22:44

标签: python

def _get_apps(path):
    """gets only all the apps"""

    return {app for app in os.listdir(path) if ".py" not in app}

apps = _get_apps(r"C:\Users\Hello\Desktop\Test")
css_apps = _get_apps(r"C:\Users\Hello\Desktop\Test2")

print(apps.difference(css_apps))

我试图在桌面上找到两个文件夹之间的区别。使用上面的代码

单独输出是正确的,它返回一个预期的集合

个人印刷:

print(apps)

print(css_apps)

输出:

{Music}

{Music,Css}

然而这样做:

print(apps.difference(css_apps))

输出

set()

最近怎么回事?

它按预期返回了一个集合,但不知怎的,我无法对返回的集合进行设置操作。

1 个答案:

答案 0 :(得分:3)

这是因为difference操作会计算apps集合中但不在css_apps集合中的元素。现在没有符合此条件的元素,因此您得到一个空集。

s.difference(t)创建了一个:

  

包含s但不在t

中的元素的新集

也许,你需要的是.symmetric_difference()。这将创建一个新集合,其中包含任何一个集合中的元素,但不能同时创建两个集合。

In [1]: s1 = set([1]) # First set

In [2]: s2 = set([1,2]) # Second set

In [3]: s1.difference(s2) # Creates a new set with elements in s1 but not in s2
Out[3]: set() # empty because no elements satisfy this criteria

In [4]: s2.difference(s1)  # Creates a new set with elements in s2 but not in s1
Out[4]: {2} # element '2' exists in s2 but not in s1

In [5]: s1.symmetric_difference(s2) # Returns new set with elements in either s1 or s2 but not both
Out[5]: {2}

In [6]: s2.symmetric_difference(s1)
Out[6]: {2}