布尔值运算&集合

示例:
返回boolean
li = []
li = {}
li = ()
if not li:
print(1)
radiansdict.has_key(key)    #如果键在字典dict里返回true,否则返回false

示例
所有的数据类型都自带布尔值,数据只有在0,None和空的时候为False
print(bool())
print(bool())
print(bool(''))
print(bool(' '))
print(bool(0))
print(bool(None))
print(bool(False))

输出结果
False
False
False
True
False
False
False

列表是空 all([]) -》True
列表中有值,有一个值是空或者False,就是all([]) -》False

not、or和and优先级

优先级由高到低:not>>and>>or

例1:先计算and,后计算or----->True and False为False,False or False为False,结果输出no

if True and False or False:
    print('yes')
else:
    print('no')

输出结果
no

例2:先计算and,后计算or------->False and False为False,True and False为True,输出yes

if True or False and False:
    print('yes')
else:
    print('no')

输出结果
yes

例3:先计算not,后计算and,最后计算or------>not True为False,False and False为False,False or False为False,输出no

if not True and False or False:
    print('yes')
else:
    print('no')

输出结果
no

例4:先计算not False为True,再计算False and True为False,最后计算True or False为True,输出yes

if True or False and not False:
    print('yes')
else:
    print('no')

输出结果
yes


集合

集合是进行关系运算的,能够去除重复元素,而元素只能是不可变类型,另外,集合和字典一样,是无序的。

创建集合

s1={1,2,2,3,4}
print(s1,type(s1))
s2=set('apple')
print(s2,type(s2))
s3=set(['apple','apple','pear'])
print(s3,type(s3))
s4=set(('apple','apple','pear'))
print(s4,type(s4))
s5=set({'apple':'苹果','pear':'梨'})
print(s5,type(s5))

输出结果:(顺序可能不一样)
{1, 2, 3, 4} <class 'set'>
{'a', 'p', 'l', 'e'} <class 'set'>
{'pear', 'apple'} <class 'set'>
{'pear', 'apple'} <class 'set'>
{'pear', 'apple'} <class 'set'>

创建空集合

s=set()
print(type(s))

交集

s={1,2,'c',4,5}
d={1,'a','b',4,5}

print(s.intersection(d))

print(s & d)

输出结果:
{1, 4, 5}


并集

s={1,2,'c',4,5}
d={1,'a','b',4,5}
print(s.union(d))

print(s | d)

输出结果:
{'b', 1, 2, 4, 5, 'a', 'c'}

差集

s={1,2,'c',4,5}
d={1,'a','b',4,5}
print(s.difference(d))

print(s - d)

输出结果
{'c', 2}

对称差集

s={1,2,'c',4,5}
d={1,'a','b',4,5}
print(s.symmetric_difference(d))

print(s ^ d)

输出结果:
{'b', 2, 'a', 'c'}

清空集合内元素

s={1,2,'c',4,5}
s.clear()
print(s)

输出结果
set()

求差集并赋值

s={1,2,'c',4,5}
d={1,'a','b',4,5}
s.difference_update(d)

输出结果
{2, 'c'}

更新

s1={'a',1}
s2={'a','b',3,1}
s1.update(s2)
print(s1)

输出结果
{1, 3, 'a', 'b'}

添加

s1={'a',1}
s1.add(3)
s1.add('a')
print(s1)

输出结果
{1, 3, 'a'}

删除

s1={'a',1}
s1.discard('a')     #当没有该元素时候不报错    
#s1.remove('aa')    #当没有aa元素时候会报错
#s1.pop()            #随机删除
print(s1)

输出结果:
{1}

判断

s1={'a',1}
s2={'a','b',3,1}
print(s1.issubset(s2))   #判断s1是否是s2的子集,如果s1等于s2那么互为子集
print(s2.issuperset(s1))  #判断s2是否是s1的超集
print(s1.isdisjoint(s2))   #判断有没有集合,如果没有返回True

输出结果
True
True
False

循环

for i in s2:
    print(i)

输出结果(无序)
l
e
a
p



转载于:https://www.cnblogs.com/fmgao-technology/p/9044670.html

&lt;think&gt;我们正在讨论Python中的按位与运算符(&amp;)。按位与运算符是一种二进制运算符,它对两个整数的二进制表示进行逐位比较,并在两个相应位都为1时返回1,否则返回0。 根据引用[1]和[2]中提到的运算符特性,我们知道运算符的行为可能因操作数的类型而有所不同。但是,按位运算符通常用于整数类型。 引用[3]提供了Python运算符的一些基本说明,其中包含了算术运算符和赋值运算符,但没有详细说明按位运算符。因此,我们将主要依据Python的标准文档来回答。 使用方法: 按位与运算符的语法是:`a &amp; b`,其中a和b都是整数。 示例: 让我们看一个简单的例子。假设我们有两个整数:5和3。 5的二进制表示为101,3的二进制表示为011(我们使用3位表示,实际上前面的0可以省略,但为了对齐可以这样写)。 逐位进行与操作: 1 0 1 &amp; 0 1 1 -------- 0 0 1 -&gt; 结果为1 所以,5 &amp; 3 的结果是1。 另一个例子:10和6 10的二进制:1010 6的二进制:0110 逐位与: 1 0 1 0 &amp; 0 1 1 0 --------- 0 0 1 0 -&gt; 结果为2 因此,10 &amp; 6 = 2。 按位与运算符也可以用于布尔值,但在Python中,布尔值实际上是整数(True为1,False为0)。所以: True &amp; True -&gt; 1 &amp; 1 = 1 (即True) True &amp; False -&gt; 1 &amp; 0 = 0 (即False) 但注意,对于布尔值,通常使用逻辑运算符(and, or, not)而不是按位运算符。按位运算符主要用于整数。 此外,按位与运算符还可以用于集合,用于求集合的交集(但这不是按位操作,而是集合操作)。例如: set1 = {1,2,3} set2 = {2,3,4} set1 &amp; set2 的结果是 {2,3} 但是,请注意,用户的问题明确是关于按位与运算符,所以我们主要关注整数运算。 因此,总结如下: 按位与运算符(&amp;)用于整数时,对两个整数的二进制表示的每一位执行逻辑与操作。 它也可以用于其他类型(如集合),但含义不同。 下面是一个Python代码示例: ```python # 整数按位与 a = 5 b = 3 print(a &amp; b) # 输出: 1 c = 10 d = 6 print(c &amp; d) # 输出: 2 # 布尔值按位与 print(True &amp; True) # 输出: True (因为True是1,1&amp;1=1,而1在布尔上下文中为True) print(True &amp; False) # 输出: False # 集合交集 set1 = {1, 2, 3} set2 = {2, 3, 4} print(set1 &amp; set2) # 输出: {2, 3} ``` 注意:在Python中,布尔值进行按位与运算时,返回的是布尔值,因为Python对布尔值进行了特殊处理。实际上,True和False是bool类型,而bool是int的子类。所以,按位与运算的结果会被转换为布尔值(当操作数都是布尔值时)。但是,如果混合整数和布尔值,则结果会是整数。 例如: print(True &amp; 3) # True是1,1 &amp; 3 = 1,所以输出1(整数) print(False &amp; 3) # False是0,0 &amp; 3 = 0,输出0(整数) 因此,建议在整数之间使用按位与,在布尔值之间使用逻辑与(and)。 相关问题: 根据用户的问题,我们生成以下相关问题: &sect;&sect;相关问题&sect;&sect; 1. Python中按位或运算符(|)的使用方法和示例是什么? 2. 按位运算符在整数和布尔值上的行为有什么不同? 3. 如何用按位与运算符检查一个整数是奇数还是偶数? 4. Python中按位运算符的优先级是怎样的? 5. 按位与运算符在集合操作中表示什么?&lt;/think&gt;### Python按位与运算符(&amp;)详解 按位与运算符`&amp;`是Python中的二进制运算符,它对两个整数的二进制表示进行逐位比较:**当两个对应位都为1时,结果为1,否则为0**。以下是详细说明和示例: #### 基本使用方法 ```python result = a &amp; b ``` 其中`a`和`b`必须是整数类型(int),运算过程会先将整数转换为二进制,再逐位进行与操作。 #### 示例解析 1. **基础运算**: ```python print(5 &amp; 3) # 输出:1 ``` - `5`的二进制:`0101` - `3`的二进制:`0011` - 逐位与运算: `0&amp;0=0`, `1&amp;0=0`, `0&amp;1=0`, `1&amp;1=1` &rarr; `0001`(十进制`1`) 2. **奇偶性检查**: ```python num = 7 if num &amp; 1: # 等价于 if num % 2 != 0 print(&quot;奇数&quot;) # 输出:奇数 ``` - 原理:所有奇数的二进制末位为`1`,与`1`(二进制`0001`)进行`&amp;`运算后结果为`1`。 3. **掩码操作**: ```python color = 0xFFAACC # RGB颜色值 red = (color &gt;&gt; 16) &amp; 0xFF # 提取红色分量 print(hex(red)) # 输出:0xff ``` - 通过右移和`&amp; 0xFF`(二进制`11111111`)提取特定8位数据。 4. **集合交集(特殊用法)**: ```python set1 = {1, 2, 3} set2 = {2, 3, 4} print(set1 &amp; set2) # 输出:{2, 3} ``` - **注意**:当操作数是集合时,`&amp;`表示交集运算,而非按位与[^2]。 #### 关键特性 1. **仅适用于整数**: ```python # 尝试用于字符串会报错 # &quot;10&quot; &amp; &quot;01&quot; &rarr; TypeError ``` 其他类型需先转换为整数(如`int(&quot;1010&quot;, 2)`)。 2. **短路特性不适用**: 与逻辑运算符`and`不同,`&amp;`总会计算两侧操作数[^1]。 3. **优先级注意**: ```python print(5 &amp; 3 == 1) # 输出:False(实际等价于 5 &amp; (3==1)) print((5 &amp; 3) == 1) # 正确写法:输出True ``` #### 实际应用场景 1. 权限控制(用位表示权限状态) 2. 网络协议中的数据包解析 3. 图像处理中的像素操作 4. 硬件寄存器配置(嵌入式开发) &gt; 引用说明: &gt; 按位运算符的行为取决于操作数类型[^2],布尔值运算中会被视为整数(`True=1`, `False=0`)[^1]。数据转换可参考`int()`函数[^3]。 ```python # 综合示例:IP地址与子网掩码计算 ip = 0xC0A80101 # 192.168.1.1 subnet_mask = 0xFFFFFF00 # 255.255.255.0 network_address = ip &amp; subnet_mask print(hex(network_address)) # 输出:0xc0a80100 (192.168.1.0) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值