一、成员运算(子集判断)
在Python中,有一个方法可以判断某一个序列是否是另外一个序列的子序列或者不是它的子序列,形式如下:
name = "小明是笨蛋"
if "小明" in name:
print("ok")
else:
print("error")
#输出结果为: ok
反过来,用not in 判断不属于:
name = "小明是笨蛋"
if "小明" not in name:
print("ok")
else:
print("error")
#输出结果为: error
可以看到,"小明"是name变量中字符串的一部分,因此,"小明"是name变量中的一个子字符串,也可以叫子序列,因此该语句作用为判断子序列,单个字符也适用。
注意:输入将要判断的序列必须是连续的,不可截断,例如输入"小笨"来判断,看起来"小"与"笨"都是name中的元素,但是"小"与"笨"是被截断了的字符,并不是连续的,因此"小笨"并不是name中的子序列。
二、布尔值——“True” , “False”
布尔变量(bool)是一种特殊的变量,它只有两个值。在某些情况下,我们得到的结果只有两种,例如"对" 或者 “错”,“好"与"坏”,“0"和"1”,无论出现什么样的情况,得到的结果只有两种,则可以定义一个布尔变量来代表这两种状态,布尔变量在Python中的两种状态叫做"True"和"False",分别为"真"和"假"。
有的同学可能会问了,那我用别的类型变量也能表示两种呀,我整型变量也可以只用“0”和“1”来代替两种状态呀!确实是,但是问题就在于,bool(布尔)变量所占用的内存为1个字节,而int(整型)变量通常要占用4个字节,因为布尔变量只有两个值!所以差别就在所占空间这,如果程序越写越大,所节省下来的内存空间显而易见!
三、逻辑运算符——“and” “or” “not”(与 或 非)
与C语言一样,Python中也有与或非三种逻辑运算,C语言中用符号“&& || ! ”来代表与或非,而Python中用"and" “or” "not"来表示。
注意:当多种逻辑运算符同级别存在时,并没有优先级的说法(括号参与除外),都是按照从左往右的顺序执行。而有括号参与时,都是先计算括号内的。在需要使用多种逻辑符号进行判断时,应当用括号进行分类,这样代码更加清晰,利于读,养成这个好习惯。
四、基本数据类型
- 整型(int)
在C语言中,整型变量根据长度的分类有很多,例如长整型、短整型等等,在Python 3系列中,所有的整型无论长短大小,都归属与int类型,在int类型下,有其很多特殊的操作,用 “变量名.xxx” 来实现,例如:
number = 123
Value = number.bit_length()
print(Value)
#输出结果为: 7
可以看到,number后面所接的.bit_length()就是在整型变量中的一种特殊操作,该操作是计算出二进制表示自身所需的位数,123 < 127 = 2^7,所以想要用二进制表示123,需要用7个二进制位才能表示。
下面列举几个常用的操作:
(1) int() ——强制转换,可以将字符串转换成整型。
(2) int(name,bse = 16) ——将name基于16进制转换成整型。
(3) bit_lenght ——计算出二进制表示自身所需的位数。
-
字符串(str)
字符串注意事项:字符串一旦创建,则不可修改,一旦修改或者拼接,则在内存中会生成新的空间给新的字符串使用,而不是在原有的基础上修改。
常用方法:
(1) capitalize() ——首字母大写
(2) lower() ——所有字符串变小写
(3) casefold() ——所有字符串变小写,比lower()更牛逼,很多国外的大小写对应关系也能转换
(4) center(20,"&") ——设置总长度为20,把字符串放中间,且空白处用&号填充,但只能填一个字符
(5) count(‘r’,1,10) ——计算一下从第1个字符到第10个字符,'r’这个字符在其中出现多少次,也可以填子序列,都支持。
(6) encode
(7) decode
(8) startswith(‘ex’) —— 寻找字符串是否以’ex’开头
(9) endswith(‘ex’) —— 寻找字符串是否以’ex’结尾
(10) find(‘ex’,5,8) —— 在字符串中从第5到第8个字符中,寻找ex所在的位置
(11) format(name = ‘alex’,…) —— 将字符串中的占位符{name}替换成 alex,占位符也可以用0,1,2…表示,format将按顺序替换
(12) format_map(“name”:‘alex’ , “a” : ‘19’) —— 作用同上,但书写格式不同
(13) index() ——作用同find一样,区别在于找不到时,程序报错,所以在使用时,通常用find()而不用index()
(14) isalnum() ——检测字符串中是否只包含数字或字母,返回值为布尔值
(15) expandtabs(10) —— 制表符,在\t处及之前总共补齐10个位置。
(16) isalpha() —— 检测字符串中是否只包含汉字或字母,返回值为布尔值
(17) isdecimal() —— 检测字符串中是否只包含数字,返回值为布尔值(不支持特殊的数字,例如②)
(18) isdigit() —— 检测字符串中是否只包含数字,返回值为布尔值(不支持中文的数字,例如二)
(19) isidentifier() —— 检测字符串中是否包含 字母、数字、下划线、标识符 def class
(20) islower() —— 判断字符串中是否都是小写
(21) isnumeric() —— 检测字符串中是否只包含数字,返回值为布尔值(支持各种数字形式)
(22) isprintable() —— 检测字符串中的内容是否都是打印后全部可见,例如含\t等转义字符则属于不可见内容,返回False
(23) isspace() —— 判断字符串中是否全部是空格
(24) title() —— 将字符串转换成标题(每个英文单词首字母变为大写)
(25) istitle() —— 判断字符串是否是标题形式(每个单词首字母大写)
(26) join() —— 将字符串中的每一个元素按照指定分隔符进行拼接
(27) ljust(20,&) —— 将字符串放在最左边,最右边用&符号填充满20个字符(字符串+占位符总共20)
(28) rjust(20,&) —— 将字符串放在最右边,最左边用&符号填充满20个字符(字符串+占位符总共20)
(29) zfill(20) —— 将字符串放在最右边,最左边用0填充满20个字符(字符串+0的个数总共20)
(30) zfill(20) —— 将字符串放在最右边,最左边用0填充满20个字符(字符串+0的个数总共20)
(31) lstrip() —— 消除字符串左边的空白以及\t \r等,也可以输入任意指定字符也能消去
(32) rstrip() —— 消除字符串右边的空白以及\t \r等,也可以输入任意指定字符也能消去
(33) strip() —— 消除字符串两边的空白以及\t \r等,也可以输入任意指定字符也能消去
(34) m = str.maketrans(“abcd”,“1234”) —— 建立起一个对应关系,a对应1,b对应2…此对应关系叫m
(35) translate(m) —— 将对应关系m进行相应替换
(36) partition(“s”) —— 从左往右找到第一个s,并进行分割,永远只能分割成三份
(37) rpartition(“s”) —— 从右往左找到第一个s,并进行分割,永远只能分割成三份
(38) split(“s”,2) —— 从右往左找到两次s,并进行分割,不输入第二个参数则遍历所有的s并进行分割,且找到的s是被消除的
(39) splitlines(true) —— 分割作用,只能根据换行符进行分割,参数中填写True则保留换行符,反之消除
(40) swapcase() —— 将字符串中的大小变小写,小写变大写,互相转换功能
(41) len(“xxx”) —— 计算xxx字符串中有几个字符
(42) xxx.replace(“ex”,“bbb”) —— 将xxx中的ex全部替换成bbb,如果最后再输入一个数字参数,则为一共替换几个 -
列表(list) (数组)
列表有些类似于C语言中的数组,但是C语言中的数组规定了,一旦确定数组类型,那么在数组类型里的元素必须和创建的类型一致,例如创建一个 char table[10]; ,那么table数组里只能存放char类型的元素,不可放置除此之外的元素。但在Python中不是,Python中的列表里,可以存放任意数据类型,例如数子、字符串、布尔值,甚至列表中还能存放列表,此时,可以认为列表是一个集合,可以放置任意东西的的集合,列表是有序的,切元素可以被修改。
在对列表进行元素提取时,可以使用和C语言类似的下标,或者使用“切片”的方法,一段一段提取,例如:
li = [1,2,"ab"]
print(li[1]) #输出结果为 2
print(li[0:2]) #输出结果为 ['1' , '2', 'ab']
引入知识点:列表在存储时,与C语言的数组存储方式一样,采用链表的方式存储,即在存储时不一定连续,因为内存当中有其自己的地址,第一个元素包含了下一个元素的地址,因此在寻找时,可以根据地址进行寻找,所以存储时不一定非要连续的内存才能存储。故列表一旦创建,是可以修改或者删除的,因为存储方式不连续,不会造成对某个元素的修改,导致后续所有元素的进位或者退位。
在对列表进行修改时,有以下几种方式:
(1)索引 例如 li[1]
(2)切片 例如 li[1:3]
删除操作使用,del li[1]即可。
在使用列表的强制转换时,内部可认为是用的for循环,在for循环中,不能用数字,因此:
arg = 123
new_age = list(arg) #错误转换
string = "ABC"
new_str = list(string) #正确转换
常用方法:
(1) append(5) —— 在列表的内容最后增加一个元素5,把输入的当成一个整体
(2) clear() —— 清空列表所有内容
(3) copy() —— 浅拷贝
(4) count(22)—— 计算22在列表中出现的次数
(5) extend() —— 在列表的内容最后增加多个元素,参数为可迭代对象
(6) index(33,0,4) —— 在列表0到4范围内找33出现的位置
(7) insert(1,99) —— 在列表第0个位置插入99
(8) pop() —— 删除列表中某个值,并获取被删除的值
(9) remove() —— 删除列表中的指定值,左边优先
(10) reverse() —— 将当前列表反转
(11) sort() —— 排序,按从小到大,可以修改参数从大到小
- 元组(tuple)
元组是对列表的二次加工,元组的特点是:元素不可被修改,不能被增加或者被删除,一般写元组的时候,推荐在最后加入逗号,一眼就能知道这个是元组。
注意:元组的一级元素不可被修改、增加或者删除。这与C语言的数组加CODE前缀有点类似,创建完以后不能被修改,因此再以后创建某些不可被修改的数据时,用元组类型创建。 - 字典(dict)
又称键值对,一个键对应一个值,值可以是任意的,例如数字、字母、字符串,甚至是列表,元组等,但键不能是任意的,其中列表就不能被当作键,而元组可以,因为元组不可被修改,而列表可以被修改。还有字典本身也不能当作字典的键,布尔值也不行(但要注意布尔值和0,1可能重复)。
常用方法:
(1) dict.fromkeys([“ke”,“123”],123) —— 根据序列,创建字典,并指定统一的值
(2) get() —— 取字典中相应键的值,如果没有则返回None,不会报错
(3) pop() —— 删除字典中对应的值,并取出这个值
(4) count(22)—— 计算22在列表中出现的次数
(5) extend() —— 在列表的内容最后增加多个元素,参数为可迭代对象
(6) index(33,0,4) —— 在列表0到4范围内找33出现的位置
range(0,100,5)创建0到99的连续数字,步长为5
可迭代对象 = 可以被for进行循环获取的对象
str、int、bool等统称为类,而在类下创建的事物叫做对象。