-----------------------✂---------------------------✂---------------------------
逻辑运算
( ̄^ ̄)ゞ
逻辑运算符: not and or
运算顺序: not → and → or
-----------------------✂---------------------------
not A
- 如果A表示True,结果就是True
- 如果A表示False,结果就是False
-----------------------✂---------------------------
A and B
- 如果A表示True,结果就是B
- 如果A表示False,结果就是A
-----------------------✂---------------------------
A or B
- 如果A表示False,结果就是B
- 如果A表示True,结果就是A
-----------------------✂---------------------------
运算式 | 结果 |
---|---|
1 or 3 | 1 |
1 and 3 | 3 |
0 and 2 and 1 | 0 |
0 and 2 or 1 | 1 |
0 and 2 or 1 or 4 | 1 |
0 or False and 1 | False |
not 0 or 1 | True |
-----------------------✂---------------------------✂---------------------------
三元运算
( ̄^ ̄)ゞ
三元: ( b1 ) if ( A ) else ( b0 )
运算式 | 结果 |
---|---|
(7777) if (2>1) else (4396) | 7777 |
7777 if 2>1 else 4396 | 7777 |
(“True”) if (2>1) (“False”) | True |
“True” if 2>1 “False” | True |
(“True”) if (1>2) (“False”) | False |
“True” if 1>2 “False” | False |
-----------------------✂---------------------------✂---------------------------
一行代码 ^ 数值交换
( ̄^ ̄)ゞ
> a,b = b,a
- a → b
- b → a
本质:创建元组进行交换
c = a , b
c = ( ( a , b ) = ( b , a ) )
c = b , a
-----------------------✂---------------------------✂---------------------------
字符串反转 ^ 最常用的方法
( ̄^ ̄)ゞ
>>> a = 'Uzi'
>>> b = a [ : :-1]
>>> print (b)
-----------------------✂---------------------------
izU
-----------------------✂---------------------------✂---------------------------
is 和 == 的区别
( ̄^ ̄)ゞ
符号 | 判断值 |
---|---|
is | 内存地址 |
== | 值 |
Waring!!! 字符串丶驻留机制
- 字符串 具有 驻留机制
- 当发生驻留时,内存地址不变
- 可以驻留的字符串:
由 数字,字符 和 下划线 组成的字符串
>>> str1='Uzi_forever_god'
>>> str2='Uzi_forever_god'
>>> print(str1 is str2)
-----------------------✂---------------------------
True
>>> print(id(str1))
>>> print(id(str2))
-----------------------✂---------------------------
2072034398512
2072034398512
-----------------------✂---------------------------✂---------------------------
深浅拷贝
( ̄^ ̄)ゞ
- 赋值 → 不是拷贝,指向同一个对象
- 浅拷贝 → 地址共用,仅拷贝对象中的父对象,不会拷贝对象的内部的子对象
- 深拷贝 → 开辟新地址,地址不共用,完全拷贝了对象里的父对象与子对象
赋值: b = a
a 和 b 指向同一个对象
一个发生改变,另一个也会发生改变
浅拷贝: b = copy.copy(a)
a 和 b 不指向同一个对象
父对象改变,另一个父对象不改变
子对象改变,另一个子对象也跟着改变
深拷贝: b = copy.deepcopy(a)
a 和 b 不指向同一个对象
父对象改变,另一个父对象不改变
子对象改变,另一个子对象不改变
import copy
a = [1, 2, 3, 4, [5, 6]] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
# 初始
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
print()
-----------------------✂---------------------------
a = [1, 2, 3, 4, [5, 6]]
b = [1, 2, 3, 4, [5, 6]]
c = [1, 2, 3, 4, [5, 6]]
d = [1, 2, 3, 4, [5, 6]]
-----------------------✂---------------------------
# 改变对象后
a.append('a')
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
print()
-----------------------✂---------------------------
a = [1, 2, 3, 4, [5, 6], 'a']
b = [1, 2, 3, 4, [5, 6], 'a']
c = [1, 2, 3, 4, [5, 6]]
d = [1, 2, 3, 4, [5, 6]]
-----------------------✂---------------------------
b.append('b')
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
print()
-----------------------✂---------------------------
a = [1, 2, 3, 4, [5, 6], 'a', 'b']
b = [1, 2, 3, 4, [5, 6], 'a', 'b']
c = [1, 2, 3, 4, [5, 6]]
d = [1, 2, 3, 4, [5, 6]]
-----------------------✂---------------------------
c[4].append('c')
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
print()
-----------------------✂---------------------------
a = [1, 2, 3, 4, [5, 6, 'c'], 'a', 'b']
b = [1, 2, 3, 4, [5, 6, 'c'], 'a', 'b']
c = [1, 2, 3, 4, [5, 6, 'c']]
d = [1, 2, 3, 4, [5, 6]]
-----------------------✂---------------------------
d[4].append('d')
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
print()
-----------------------✂---------------------------
a = [1, 2, 3, 4, [5, 6, 'c'], 'a', 'b']
b = [1, 2, 3, 4, [5, 6, 'c'], 'a', 'b']
c = [1, 2, 3, 4, [5, 6, 'c']]
d = [1, 2, 3, 4, [5, 6, 'd']]
-----------------------✂---------------------------
-----------------------✂---------------------------✂---------------------------
交并集
( ̄^ ̄)ゞ
- 首先用set集合
- 然后再用符号操作
交并集 | Python操作 | 符号含义 |
---|---|---|
交集 a ∩ b | a & b | 与 |
并集 a ∪ b | a 丨 b | 或 |
反交集 | a ^ b | 异或 |
差集 | a - b | 减号 |
A = [1,2,3,4]
B = [3,4,5,6]
# 首先用set集合
a = set(A)
b = set(B)
# 然后再用符号操作
print(a & b)
print(a | b)
print(a ^ b)
print(a - b)
-----------------------✂---------------------------
[3,4]
[1,2,3,4,5,6]
[1,2,5,6]
[1,2]
-----------------------✂---------------------------
-----------------------✂---------------------------✂---------------------------
for 循环小陷阱
( ̄^ ̄)ゞ
a = [2,4,5,6,8,9,12]
for i in a:
if ( i%2 == 0 ):
a.remove(i)
print(a)
-----------------------✂---------------------------
[4,5,8,9]
-----------------------✂---------------------------
i = 0 :
[ 2 , 4 , 5 , 6 , 8 , 9 , 12 ]
a0 → 2 , Remove
i = 1:
[ 4 , 5 , 6 , 8 , 9 , 12 ]
a1 → 5 , Retain
i = 2:
[ 4 , 5 , 6 , 8 , 9 , 12 ]
a2 → 6 , Remove
i = 3:
[ 4 , 5 , 8 , 9 , 12 ]
a3 → 9 , Retain
i = 4:
[ 4 , 5 , 8 , 9 , 12 ]
a4 → 12 , Remove
Finish:
a = [ 4 , 5 , 8 , 9 ]
解决办法
for i in a:
↓↓↓
for i in a[:]: #浅拷贝