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()
最近怎么回事?
它按预期返回了一个集合,但不知怎的,我无法对返回的集合进行设置操作。
答案 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}