这里写自定义目录标题
1 变量、运算符和数据类型
1.1 注释
#
单行注释
#打印一个爱心
print('❤')
结果如下:
❤
''' '''
或""" """
,多行注释
"""
我要打印一个爱心
第二个爱心
第三个
"""
print('❤')
print('❤')
print('❤')
结果如下:
❤
❤
❤
1.2 运算符
- 算术运算符
+
加
-
减
*
乘
\
除
\\
整除
%
取余
**
幂
print(1+2)
print(1-2)
print(10/3)
print(10//3)
print(10%3)
print(10**3)
结果如下:
3
-1
3.3333333333333335
3
1
1000
- 比较运算符
>
大于
>=
大于等于
<
小于
<=
小于等于
==
等于
!=
不等于
print(1>2)
print(1>=2)
print(1<2)
print(1<=2)
print(1==2)
print(1!=2)
结果如下:
False
False
True
True
False
True
- 逻辑运算符
and
与
or
或
not
非
print((1>2) and (3>2))
print((1>2) or (3>2))
print(not (1>2))
结果如下:
False
True
True
- 位运算符
~
按位取反
&
按位与
|
按位或
^
按位异或
<<
左移
>>
右移
print(~4)
print(3&0)
print(3|0)
print(3^0)
结果如下:
-5
0
3
3
- 三元运算符
a=x if x<y else y
x,y=1,2
a=x if x>y else y
print(a)
结果如下:
2
- 其他运算符
is
是
is not
不是
in
存在
not in
不存在
print(1 is 1)
print('2' is'2')
print([1,2] is [1,2])
a=[1,2]
b=[1,2]
print(a is b)
print(a==b)
print(1 in a)
print(1 not in a)
结果如下:
True
True
False
False
True
True
False
- 运算符的优先级
a. 一元运算符优于二元运算符。如正负号。
b. 先算术运算,后移位运算,后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7
c. 逻辑运算后结合
1.3 变量和赋值
变量:字母、数字、下划线组成;大小写敏感;使用前需先赋值。
user_id='001'
user_name='张三'
print(user_id+user_name)
结果如下:
001张三
1.4 数据类型与转换
int
整型
float
浮点型
bool
布尔型
int(x)
转换成整型
float(x)
转换成浮点型
str(x)
转换成字符串
print(1,type(1))
print(type('2'))
print(type(2.0))
print(type(1),bool(1),bool(0))
print(isinstance(1,int))
print(str(1+2))
print(int(1.03))
结果如下:
1 <class 'int'>
<class 'str'>
<class 'float'>
<class 'int'> True False
True
3
1
1.5 print函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
w=['a','b','c','d','e']
for i in w:
print(i)
结果如下:
a
b
c
d
e
w=['a','b','c','d','e']
for i in w:
print(i,end="&")
结果如下:
a&b&c&d&e&
w=['a like','b not like','c in','d not in','e is']
for i in w:
print(i,"yes",sep=",")
结果如下:
a like,yes
b not like,yes
c in,yes
d not in,yes
e is,yes
1.6 练习题
- 怎样对python中的代码进行注释?
方式一:# 单行注释
方式二:’’’ ‘’'多行注释
方式三:""" “”"多行注释 - python有哪些运算符,这些运算符的优先级是怎样的?
算术运算符:+、-、*、/、//、%、**
比较运算符:>、>=、<、<=、==、!=
逻辑运算符:and、or、not
位运算符:~、&、|、^、<<、>>
三元运算符:small=x if x<y else y
其他运算符:is、is not、in、not in
优先级:一元运算符优先于二元运算符;算术运算符>后移位运算>位运算;逻辑运算最后结合 - python 中 is, is not 与 ==, != 的区别是什么?
is 和 is not,对比的是两个变量的内存地址,==和!=对比的是两个变量的值。 - python 中包含哪些数据类型?这些数据类型之间如何转换?
数据类型:数字:int(整型)、float(浮点型)、bool(布尔型)
类型转换:int()、float()、str()
2 位运算
2.1 原码、反码、补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码
来表示。
原码:就是其二进制表示(注意,有一位符号位)。
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
补码:正数的补码就是原码,负数的补码是反码+1。
符号位:高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。
2.2 按位非操作~
~ 把 num 的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。
print(5,bin(5))
print(~5,bin(~5))
结果如下:
5 0b101
-6 -0b110
2.3 按位与操作&
#只有两个对应位都为 1 时才为 1
print(bin(1),bin(2),bin(1&2),1&2)
结果如下:
0b1 0b10 0b0 0
2.4 按位或操作|
#只要两个对应位中有一个 1 时就为 1
print(bin(1),bin(2),bin(1|2),1|2)
结果如下:
0b1 0b10 0b11 3
2.5 按位异或操作^
#只有两个对应位不同时才为 1
print(bin(1),bin(2),bin(1^2),1^2)
结果如下:
0b1 0b10 0b11 3
2.6 按位左移操作<<
print(bin(11),bin(11<<3),11<<3)
结果如下:
0b1011 0b1011000 88
2.7 按位右移操作>>
print(bin(11),bin(11>>3),11>>3)
结果如下:
0b1011 0b1 1
2.8 利用位运算实现快速计算
- 通过 << , >> 快速计算2的倍数问题
print(16<<1)#计算16*2
print(16<<4)#计算16*(2^4)
print(16>>1)#计算16/2
print(16>>4)#计算16/(2^4)
print(1<<4)#计算2^4
结果如下:
32
256
8
1
16
- 通过 ^ 快速交换两个整数,通过 a & (-a) 快速获取 a 的后为 1 位置的整数
a=3
b=4
a^=b
print(a,bin(a))
print(a&(-a),bin(a),bin(-a),bin(a&(-a)))
结果如下:
7 0b111
1 0b111 -0b111 0b1
2.9 利用位运算实现整数集合
-
一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)
比如集合 {1, 3, 4, 8},可以表示成 01 00 01 10 10 而对应的位运算也就可以看作是对集合进行的操作。 -
元素与集合的操作:
a | (1<<i)
把 i 插入到集合中
a & ~(1<<i)
把 i 从集合中删除
a & (1<<i)
判断 i 是否属于该集合(零不属于,非零属于)
a=0b100011010 #a={1,3,4,8}
b=0b1110000 #b={4,5,6}
print(bin(a|(1<<7))) #插入
print(bin(a&~(1<<3))) #删除
print(bin(a))
print((a&(1<<4))) #属于
print((a&(1<<2))) #不属于
结果如下:
0b110011010
0b100010010
0b100011010
16
0
- 集合之间的操作:
~a
a补
a & b
a 交 b
a | b
a 并 b
a & (~b)
a 差 b
a=0b100011010 #a={1,3,4,8}
b=0b1110000 #b={4,5,6}
print(bin(~a & 0xffffffff))#补
print(bin(a&b))#交
print(bin(a|b))#并
print(bin(a&(~b)))#差
结果如下:
0b11111111111111111111111011100101
0b10000
0b101111010
0b100001010
2.10 练习题(还在思考中)
leetcode 习题 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。尝试使用位运算解决此题。
“”"
Input file
example1: [2,2,1]
example2: [4,1,2,1,2]
Output file
result1: 1
result2: 4
“”"
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#your code here