2020年,不同寻常的一年,无论是全球疫情的大环境,还是就自身而言,都面临着巨大的挑战,在年底有幸加入了Python训练营,希望自己能加持到最后,为2020画上圆满的句号。
第一天的主要内容是变量、 运算符与数据类型及位运算。对于变量,运算符及数据类型,之前自学的Python课程中都有涉及,而针对于位运算,是第一次较为系统细致的学习。
在Python中,#表示注释,作用于整行;而''' ''' 或者 """ """ 表示区间注释,在三引号之间的所有内容被注释即多行注释。
运算符包括算术运算符,加(+)减(-)乘(*)除(/)整除(//)取余(%),幂(**),比较运算符大于(>)大于等于(>=),小于(<),小于等于(<-=),等于(==)和不等于(!=);逻辑运算符与(and)或(or)非(not);位运算法按位取反(~)按位与(&),按位或(|),按位异或(^),左移(<<),右移(>>);其他运算符是(is)不是(not is )存在(in)不存在(not in)。运算符的优先级(1) 一元运算符优于二元运算符。如正负号。(2)先算术运算,后移位运算,最后位运算。(3) 逻辑运算最后结合。在其他运算符中,需要特别注意is, is not 对比的是两个变量的内存地址;而==, != 对比的是两个变量的值即假如比较的两个变量,指向的都是地址不可变的类型( str等),那么 is, is not 和 ==,! = 是完全等价的。但是假如对比的两个变量,指向的是地址可变的类型( list, dict, tuple等),则两者是有区别的。
Python中数据类型包括整型(int),浮点型(float)和布尔型(bool)他们之间的转换:转换为整型 int(x, base=10),转换为字符串 str(object=''),转换为浮点型 float(x)。
进制有三种不同的表示形式:原码、反码和补码, 计算机内部使用补码来表示。原码:就是其二进制表示(注意,有一位符号位)。反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。补码:正数的补码就是原码,负数的补码是反码+1。符号位:最高位为符号位, 0表示正数, 1表示负数。在位运算中符号位也参与运算。~ 把 num 的补码中的 0 和 1 全部取反( 0 变为 1, 1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。按位与操作,只有两个对应位都为 1 时才为 1
。按位或操作,只要两个对应位中有一个 1 时就为 1。按位异或操作,只有两个对应位不同时才为 1,异或操作的性质:满足交换律和结合律,任何数与自身异或结果为 0,任何数与 0 异或结果为本身。按位左移操作,num << i 将 num 的二进制表示向左移动 i 位所得的值。按位右移操作,num >> i 将 num 的二进制表示向右移动 i 位所得的值。
练习:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
主要用到异或的性质,实际操作如下:
1 class Solution: 2 def singleNumber(self, nums): 3 n = 0 4 for i in nums: 5 n ^= i 6 print(n) 7 8 s = Solution() 9 exl1=[2,2,1] 10 exl2=[4,1,2,1,2] 11 12 s.singleNumber(exl1) 13 1 14 s.singleNumber(exl2) 15 4
以上为今日学习内容,留作之后参考使用。