Task01: 变量、运算符、数据类型及位运算
-
怎样对python中的代码进行注释?
单行注释:#
多行注释:’’’ ‘’’ or “”" “”" -
python有哪些运算符,这些运算符的优先级是怎样的?
算数运算符,比较运算符,逻辑运算符,位运算符,三元运算符,其他运算符
运算符的优先级:一元运算符优于二元运算符,先算术运算,后移位运算,最后位运算,逻辑运算最后结合。 -
python 中 is, is not 与 ==, != 的区别是什么?
is, is not 对比的是两个变量的内存地址;
==, != 对比的是两个变量的值;
比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的;
对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。 -
python 中包含哪些数据类型?这些数据类型之间如何转换?
基本类型:整型,浮点型,布尔型;
容器类型:字符串,元组,列表,字典和集合
类型转换:
转换为整型 int(x, base=10)
转换为字符串 str(object=’’)
转换为浮点型 float(x) -
如何获取类型信息
type(object) 和isinstance(object, classinfo),这俩的区别是type() 不会认为子类是一种父类类型,不考虑继承关系,isinstance() 会认为子类是一种父类类型,考虑继承关系 -
变量名规则
变量名可以包括字母、数字、下划线、但变量名不能以数字开头,python变量名区分大小写 -
位运算
原码&反码&补码
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)
补码:正数的补码就是原码,负数的补码是反码+1
按位与&:只有两个对应位都为 1 时才为 1
按位或 |:只要两个对应位中有一个 1 时就为 1
按位异或^:只有两个对应位不同时才为 1
特别注意:0和任何数异或都是任何数,注意哦,leetcode会用到
按位左移操作 <<
按位右移操作 >>
利用位运算实现快速计算
n << 1 -> 计算 n2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b) -
leetcode 练习题
习题 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
from collections import Counter
class Solution(object):
def singleNumber(self,nums):
numdic = dict(Counter(nums))
for k,v in numdic.items():
if v == 1:
return k
print (Solution().singleNumber([1,2,2,3,3]))
用位运算解决
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = 0
for num in nums:
a = a^num
return a