逻辑运算
# 逻辑运算
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or False and 1
print(v1) # 1
print(v2) # 3
print(v3) # 0
print(v4) # 1
print(v5) # 1
print(v6) # False
'''
运算顺序: () => not => and => or
a or b:
如果a 为 false 那就是b(甭管b是啥)
如果a 为 true 那就是a
a and b:
如果a 为 false 那就是a
如果a为 true 那就是 b
如果多个运算 那就从左到右 依次运算 such as: v5 = 0 and 2 or 1 or 4 先算 0 and 2 =》 0 再算 0 or 1 =》 1 再算 1 or 4 =》 1
'''
三元运算符
# 三元运算编写格式
# a + b
# () if () else () 类似于c中的 a > b ? c: d 不过不同的是 python中的条件放到了 中间那个括号
a = 3 if 4 > 3 else 4
print(a)
一行代码交换数值
# 一行代码交换 两个变量的值
a = 10
b = 20
a, b = b, a # 等号右边 实际上是一组元组
print(a, b)
字符反转
name = 'abced'
print(name[-1::-1])
'''
name[x:y:z]
x 起始位置 包括那个位置 如果 z是1 代表正向 从x开始截取 到y-1 y不写就截取到末尾
如果 z是-1 走代表逆向 x依然是逆向的起始位置 如果你要截取全部 你可以写 name[-1::-1] 或 name[::-1]
'''
布尔值为false的常见值
# 列举布尔值为False的常见值
print(bool(0))
print(bool('')) # 空字符
print(bool(list())) # 空列表
print(bool(tuple())) # 空元组
print(bool(dict())) # 空字典
print(bool(set())) # 空集合
'''常见的数据类型中所有表示为空的东西都能被称之为 False'''
def func():
pass
print(bool(func())) # 函数加上() 就是 False
print(bool(func)) # 不加就是 True 下面的类 无论加不加都是True
class mClass(type): # 给MyClass设置了元类 那么 bool(MyClass)的时候就会去元类判断 然后这里也是false 不然默认也是true
def __bool__(self):
return False
class MyClass(metaclass=mClass):
def __bool__(self):
return False # 默认是返回 True 设置这样就会返回False 但是是bool(MyClass())才是
print(bool(MyClass))
print(bool(MyClass()))
is和==区别
# is和==的区别
'''
is 判断的是内存地址的区别
== 判断是是值的区别
'''
list_1 = [1,2]
list_2 = [1,2]
print(list_1 is list_2) # 判断的是内存地址
print(list_1 == list_2) # 只判断值是否相等
a = '你好'
c = '好'
b = '你' + c # 如果通过变量拼接 那么 a和b的值虽然相等 但是地址不同了
print(id(a))
print(id(b))
print('你好' == a)
print('你好' == b)
print('你好' is a)
print('你好' is b)
不同的三位数
# 1,2,3,4,5 能组合成多少个不相同且无重复的3位数
# 方法一 因为位数不同 不可能重复 直接循环即可得结果
nums = {1,2,3,4,5}
num = 0
for i in nums:
for j in nums:
for k in nums:
num += 1
print(str(i) +str(j) + str(k))
print(num)
# 方法二 直接遍历所有三位数值 然后将每个数的三位数去重 减去 集合1,2,3,4,5 只要是空 则是满足条件的
nums = {1,2,3,4,5}
list = []
for i in range(100,1000):
s = set(int(j) for j in str(i))
if not s-nums:
list.append(s)
print(len(list))
fromkeys
v = dict.fromkeys(['k1', 'k2'], []) # 把第一个列表里面的数值当成字典的key 后面的当成它里面的value
print(v)
print(id(v['k1']))
print(id(v['k2']))
'''
他们的内存地址是同一个地方
'''
列表去重
# 一行代码实现删除列表中重复的值
lst = [1,2,3,4,1,2,3]
print(list(set(lst)))
数据类型转换
# 如何实现"1,2,3" 变成 ['1', '2', '3']
s = '1,2,3'
print(list(eval(s))) # 将 s =》 [1,2,3]
print(s.split(',')) # 将 s =》 ['1','2','3']
# 如何实现['1', '2', '3'] 变成 [1,2,3]
d = ['1', '2', '3']
# 方法一 先拼接成字符串 再通过 eval转换成 元组包数值 再list转换为列表
print(list(eval(','.join(d))))
# 方法二 列表推导式
d = [int(i) for i in d] # 将 d =》 [1,2,3]
print(d)
一个元素的元组
b = (1)
print(type(b))
c = (1,) # 加上逗号就是元组 不加则就是数值型
print(type(c))