Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python集合计数器减法与'-';_Python_Python 3.x - Fatal编程技术网

Python集合计数器减法与'-';

Python集合计数器减法与'-';,python,python-3.x,Python,Python 3.x,我是pythonic风格解决方案的新手,我试图理解如何阅读下面的代码,或者理解实际发生的事情 鉴于: s = "bab" t = "aba" s_counter = Counter(s) # Counter({'b': 2, 'a': 1}) t_counter = Counter(t) # Counter({'a': 2, 'b': 1}) 两者之间有什么区别 print((s_counter - t_counter)) # Counter({'b'

我是pythonic风格解决方案的新手,我试图理解如何阅读下面的代码,或者理解实际发生的事情

鉴于:

s = "bab"
t = "aba"

s_counter = Counter(s) # Counter({'b': 2, 'a': 1})
t_counter = Counter(t) # Counter({'a': 2, 'b': 1})
两者之间有什么区别

print((s_counter - t_counter)) # Counter({'b': 1})

versus

s_counter.subtract(t_counter)
print(s_counter) # Counter({'b': 1, 'a': -1})
当你运行代码时,会发生什么? 在subtract()函数中,它似乎基本上抓取每个键,然后用t_计数器值查找subtract s_计数器值。 但我不确定你是否同意

print((s_counter - t_counter))

.subtract
方法在
计数器
对象上正常工作,并接受映射(例如
dict
计数器
s)或任意可编辑项。此外,它还允许非正值

-
运算符创建一个新的计数器对象,并且只包含正结果(结果中忽略0和负值)。它只在
计数器
对象之间工作


.update
方法和
+
操作符之间存在类似的关系。

只是为了补充juanpa。arrivillaga的出色解释,下面是一些有助于理解差异的输出

举以下例子:

来自集合导入计数器的
>>
>>>计数器a=计数器(“一些随机消息”)
>>>计数器\u b=计数器(“更多随机消息”)
如果我们检查实例的id(每个实例的id都是唯一的),您将看到它是不同的,所以当您使用操作符时,基本上会创建一个新实例

>>> id(counter_a)
2507556487952

>>> id(counter_b)
2507555822864

# Different id
>>> id(counter_a - counter_b)
2507537937808

# resulting instance is not a same instance as counter_a
>>> counter_a is (counter_a - counter_b)
False
所以主要的区别是,当创建新实例时,原始实例不受影响。如果修改了原始实例,它通常不会返回任何内容

这个主题是内置的python集合,如set、list等

>set\u a=set(“abcde”)
>>>集合=集合(“cdefg”)
#不同的例子
>>>集合a是集合a-集合b
假的
#原版没有受到影响
>>>设置
{'c','a','d','b','e'}
#一无所获
>>>集合a.差异更新(集合b)
#这次受影响了
设置
{'a','b'}
>>列表\u a=list(“abcde”)
>>>列表\u b=列表(“cdefg”)
#不同的例子
>>>列表a是列表a+列表b
假的
#不受影响
>>>清单a
['a','b','c','d','e']
#一无所获
>>>列表a.扩展(列表b)
#现在受到影响
>>>清单a
['a','b','c','d','e','c','d','e','f','g']

问题代码所演示的行为是。另外,Python中的注释以
#
开头,而
/
是运算符。@metatoaster我在文档中找到了它。非常感谢。我滚动得不够。。是的,在python注释中是#,我是直接在stackoverflow上键入的。。因此,最终使用的是混合匹配语言请注意不要编写会引起错误的代码
/
是Python中的运算符,而不是注释。我把你的东西修好了