python中集合减法的示例

Tzv*_*i L 1 python list set python-3.x

我正在学习 Python 数据结构课程,解决方案的建议包括这段我不理解的代码。

这是字典的示例:

vc_metro = {
    'Richmond-Brighouse': set(['Lansdowne']),
    'Lansdowne': set(['Richmond-Brighouse', 'Aberdeen'])
}
Run Code Online (Sandbox Code Playgroud)

建议删除值中的某些元素,我们使用以下代码:

vc_metro['Lansdowne'] -= set(['Richmond-Brighouse'])
Run Code Online (Sandbox Code Playgroud)

我从未见过这样的结构,并且在基本情况下使用它,例如:

my_list = [1, 2, 3, 4, 5, 6]
other_list = [1, 2]
my_list -= other_list
Run Code Online (Sandbox Code Playgroud)

不起作用。我在哪里可以了解有关此推荐策略的更多信息?

Mad*_*ist 7

您无法减去列表,但可以set有意义地减去对象。集合是哈希表,有点类似于dict.keys(),它只允许一个对象的一个​​实例。

运算-=符与difference方法等效,只是它是就地的。它从左侧删除两个操作数中存在的所有元素。

您的简单集合示例如下所示:

>>> my_set = {1, 2, 3, 4, 5, 6}
>>> other_set = {1, 2}
>>> my_set -= other_set
>>> my_set
{3, 4, 5, 6}
Run Code Online (Sandbox Code Playgroud)

带逗号但不带冒号的花括号被解释为集合对象。所以直接构造函数调用

set(['Richmond-Brighouse'])
Run Code Online (Sandbox Code Playgroud)

相当于

{'Richmond-Brighouse'}
Run Code Online (Sandbox Code Playgroud)

请注意,您不能这样做set('Richmond-Brighouse'):将字符串的所有单个字符添加到集合中,因为字符串是可迭代的。

-=使用/difference代替的原因remove是差异仅删除现有元素,并默默地忽略其他元素。该discard方法对单个元素执行此操作。差分允许一次删除多个元素。

原来的行vc_metro['Lansdowne'] -= set(['Richmond-Brighouse'])可以重写为

vc_metro['Lansdowne'].discard('Richmond-Brighouse')
Run Code Online (Sandbox Code Playgroud)