对于python集,'和'和'&'之间有区别吗?

hje*_*mig 5 python set

如果字典键有空值,我对问题检查有很好的帮助.但我想知道and&python 之间是否存在差异?我认为它们应该相似吗?

dict1 ={"city":"","name":"yass","region":"","zipcode":"",
   "phone":"","address":"","tehsil":"", "planet":"mars"}

whitelist = {"name", "phone", "zipcode", "region", "city",
             "munic", "address", "subarea"}

result = {k: dict1[k] for k in dict1.viewkeys() & whitelist if dict1[k]}
Run Code Online (Sandbox Code Playgroud)

Jus*_*ier 8

and 是一个逻辑运算符,用于比较两个值,IE:

> 2 > 1 and 2 > 3
True
Run Code Online (Sandbox Code Playgroud)

& 是一个按位运算符,用于执行按位AND运算:

> 255 & 1
1
Run Code Online (Sandbox Code Playgroud)

更新

对于集合操作,&操作符等同于intersection()操作,并创建一个包含s和t共有元素的新集合:

>>> a = set([1, 2, 3])
>>> b = set([3, 4, 5])
>>> a & b
set([3])
Run Code Online (Sandbox Code Playgroud)

and仍然只是一个逻辑比较函数,并将set参数视为非假值.如果两个参数都不是,它也将返回最后一个值False:

>>> a and b
set([3, 4, 5])
>>> a and b and True
True
>>> False and a and b and True
False
Run Code Online (Sandbox Code Playgroud)

值得注意的是,根据Dictionary视图对象的python文档,返回的对象dict1.viewkeys()是一个"类似于"的视图对象:

返回的对象的dict.viewkeys(),dict.viewvalues()并且dict.viewitems()是视图对象.它们提供字典条目的动态视图,这意味着当字典更改时,视图会反映这些更改.

...

dictview & other

将dictview和另一个对象的交集作为新集返回.

...

  • 你应该使用“set”而不是“Set” (2认同)

tac*_*ell 5

  • and 是合乎逻辑的
  • & 是按位的

and如果两个值都计算为true,则logical 返回第二个值.

对于集合&是交集.

如果你这样做:

In [25]: a = {1, 2, 3}

In [26]: b = {3, 4, 5}

In [27]: a and b
Out[27]: set([3, 4, 5])

In [28]: a & b
Out[28]: set([3])
Run Code Online (Sandbox Code Playgroud)

这是因为bool(a) == Truebool(b) == True这样and返回第二组. &返回集合的交集.

(setdoc)