2015-09-27 92 views
1
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() 

回事什么?

它按预期的方式返回了一个集合,但不知何故我无法对返回的集合进行集合操作。

回答

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} 
+2

也许建议'symmetric_difference'作为'difference'的替代。 (是否'symmetric_difference'会有所帮助,取决于结果如何处理。) –

+0

我认为顺序对于区别没有任何影响。我的坏 – Zion

+0

@WarrenWeckesser这就是我正在寻找。所以现在我明白什么是对称差异。两套之间的差异无论是哪一套是比较的套数 – Zion