Python基础数据类型
整数除法 //
返回的是比结果小的最大整数值
运算优先级
优先级从高到低排列如下:
- ()括号
- **幂指数运算
- / * // % 除,乘, 整数除法,取余运算
- ‘+ -’ 加减
字符串
- 字符串的生成,单引号和双引号是等价的
- 三引号用来输入包含多行文字的字符串
- 使用 () 或者 \ 来换行
类型转换
浮点数转整型,只保留整数部分
Python字符串及其操作
字符串方法
分割
- s.split()将s按照空格(包括多个空格,制表符\t,换行符\n等)分割,并返回所有分割得到的字符串。
- s.split(sep)以给定的sep为分隔符对s进行分割。
连接
- 与分割相反,s.join(str_sequence)的作用是以s为连接符将字符串序列str_sequence中的元素连接起来,并返回连接后得到的新字符串
替换
- s.replace(part1, part2)将字符串s中指定的部分part1替换成想要的部分part2,并返回新的字符串。
大小写转换
- s.upper()方法返回一个将s中的字母全部大写的新字符串。
- s.lower()方法返回一个将s中的字母全部小写的新字符串
去除多余的空格
- s.strip()返回一个将s两端的多余空格除去的新字符串。
- s.lstrip()返回一个将s开头的多余空格除去的新字符串。
- s.rstrip()返回一个将s结尾的多余空格除去的新字符串。
强制转换为字符串
- str(ob)强制将ob转化成字符串。
- repr(ob)也是强制将ob转化成字符串。
二者区别:str()主要用来为终端用户输出一些信息,而repr()主要用来调试;同时后者的目标是为了消除一些歧义(例如浮点数的精度问题),前者主要为了可读。
整数与不同进制的字符串的转化
- 十六进制hex()
- 八进制oct()
- 二进制bin()
- 使用 int 将字符串转为整数
- 指定按照多少进制来进行转换,最后返回十进制表达的整数int(‘FF’, 16)
- float 可以将字符串转换为浮点数
格式化字符串
- Python用字符串的format()方法来格式化字符串。
- 也可以使用旧式的 % 方法进行格式化
索引和分片
索引
- 单个索引大于等于字符串的长度时,会报错
分片
- 分片用来从序列中提取出想要的子序列
- 用法:var[lower:upper:step] 其范围包括 lower ,但不包括 upper ,即 [lower,upper), step 表示取值间隔大小,如果没有默认为1。
- lower和upper可以省略,省略lower意味着从开头开始分片,省略upper意味着一直分片到结尾。
- 当step的值为负时,省略lower意味着从结尾开始分片,省略upper意味着一直分片到开头。
- 当给定的upper超出字符串的长度(注意:因为不包含upper,所以可以等于)时,Python并不会报错,不过只会计算到结尾。
Python列表和元组
列表(list)
空列表可以用 [] 或者 list() 生成
列表的常见操作
- 长度:用len查看列表长度
- 加法: 相当于将两个列表按顺序连接
- 乘法:列表与整数相乘,相当于将列表重复相加
索引和分片
添加元素
- append:向列表添加单个元素,l.append(ob) 将元素 ob 添加到列表 l 的最后。append 每次只添加一个元素,并不会因为这个元素是序列而将其展开
- extend: 向列表添加序列元素
l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst。
insert: 插入元素,l.insert(idx, ob) 在索引 idx 处插入 ob ,之后的元素依次后移。
删除元素
- del:根据下标进行删除
- pop:弹出元素,l.pop(idx) 会将索引 idx 处的元素删除,并返回这个元素。未指定 idx 时,默认为列表最后一个元素。
- remove:根据元素的值进行删除,l.remove(ob) 会将列表中第一个出现的 ob 删除,如果 ob 不在 l 中会报错。
测试从属关系
- 用 in 来看某个元素是否在某个序列(不仅仅是列表)中;用not in来判断是否不在某个序列中。
- 用 index 查找某个元素在列表中的位置:l.index(ob) 返回列表中元素 ob 第一次出现的索引位置,如果 ob 不在 l 中会报错。
- count 查找列表中某个元素出现的次数
修改元素
修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改
排序
- sort方法将 list 按特定顺序重新排列,默认为由小到大,参数 reverse=True 可改为倒序,由大到小
- 如果不想改变原来列表中的值,可以使用 sorted 函数
列表反向
- l.reverse() 会将列表中的元素从后向前排列。
- 如果不想改变原来列表中的值,可以使用分片
可变类型和不可变类型
列表是可变的
- 通过索引改变
- 通过方法改变
字符串是不可变的
- 通过索引改变会报错
- 字符串方法只是返回一个新字符串,并不改变原来的值
- 如果想改变字符串的值,可以用重新赋值的方法
元组(tuple)
基本操作
- 与列表相似,元组Tuple也是个有序序列,但是元组是不可变的,用()生成。
- 可以索引,切片
- 但是元组是不可变的
单个元素的元组生成
由于()在表达式中被应用,只含有单个元素的元组容易和表达式混淆,所以采用下列方式定义只有一个元素的元组a = (10, )
元组方法
由于元组是不可变的,所以只能有一些不可变的方法,例如计算元素个数 count 和元素位置 index ,用法与列表一样。
Python字典和集合
字典是一种可变容器,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。
键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
集合是一个无序的不重复元素序列。
字典(dict)
字典 dictionary ,在一些编程语言中也称为 hash , map ,是一种由键值对组成的数据结构。
基本操作
- 空字典
使用 {} 或者 dict() 来创建一个空的字典 有了dict之后,可以用索引键值的方法向其中添加元素,也可以通过索引来查看元素的值
- 初始化字典
1.通常的定义方式
2.dict()转化生成字典 - 字典没有顺序
- 键必须是不可变的类型
- 适合做键的类型
1.在不可变类型中,整数和字符串是字典中最常用的类型;而浮点数通常不推荐用来做键(精度问题)
2.可以使用元组作为键值,元组是有序的,因此 (‘New York’, ‘Austin’) 和 (‘Austin’, ‘New York’) 是两个不同的键 - 字典方法
get方法:返回字典中键 key 对应的值,如果没有这个键,返回 default 指定的值(默认是 None )
d.get(key, default = None)
pop方法删除元素:pop 方法可以用来弹出字典中某个键对应的值,同时也可以指定默认参数
d.pop(key, default = None)
del 函数可以用来删除字典中特定的键值对
update方法更新字典:可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,则用update方法
d.update(newd)
in查询字典中是否有该键
keys 方法:返回一个由所有键组成的列表
d.keys()
values 方法:返回一个由所有值组成的列表
d.values()
items 方法:返回一个由所有键值对元组组成的列表
d.items()
集合(set)
集合 set 是一种无序的序列。
因为集合是无序的,所以当集合中存在两个同样的元素的时候,Python只会保存其中的一个(唯一性);同时为了确保其中不包含同样的元素,集合中放入的元素只能是不可变的对象(确定性)。
集合生成
- 可以用set()函数来显示的生成空集合
- 可以使用一个列表来初始化一个集合
- 集合中的元素是用大括号{}包含起来的,这意味着可以用{}的形式来创建集合
集合操作
- 并
两个集合的并,返回包含两个集合所有元素的集合(去除重复)
可以用方法 a.union(b) 或者操作 a | b 实现 - 交
两个集合的交,返回包含两个集合共有元素的集合
可以用方法 a.intersection(b) 或者操作 a & b 实现 - 差
a 和 b 的差集,返回只在 a 不在 b 的元素组成的集合
可以用方法 a.difference(b) 或者操作 a - b 实现 - 对称差
a 和b 的对称差集,返回在 a 或在 b 中,但是不同时在 a 和 b 中的元素组成的集合
可以用方法 a.symmetric_difference(b) 或者操作 a ^ b 实现(异或操作符) - 包含关系
判断 b 是不是 a 的子集,可以用 b.issubset(a) 方法,或者更简单的用操作 b <= a
也可以用 a.issuperset(b) 或者 a >= b 来判断
方法只能用来测试子集,但是操作符可以用来判断真子集
集合方法
add 方法向集合添加单个元素
s.add(a)
update 方法向集合添加多个元素
s.update(seq)
remove 方法移除单个元素:如果元素不存在则报错
s.remove(ob)
pop方法弹出元素:由于集合没有顺序,不能像列表一样按照位置弹出元素,所以pop 方法删除并返回集合中任意一个元素,如果集合中没有元素会报错
discard 方法:作用与 remove 一样,但是当元素在集合中不存在的时候不会报错。
Python流程控制
Python 提供了现代编程语言都支持的两种基本流程控制结构:分支结构用于实现根据条件来选择性地执行某段代码,可以使用判断语句实现,循环结构用于实现根据循环条件重复执行某段代码,可以使用循环语句实现。
基本用法
if条件语句判断
虽然都是用 if 关键词定义判断,但与C,Java等语言不同,Python不使用 {} 将 if 语句控制的区域包含起来。Python使用的是缩进方法。同时,也不需要用 () 将判断条件括起来。
- 同一个代码块使用同样的缩进值
- 不同的缩进值表示不同的代码块
- 一个完整的 if 结构,条件后的 : 是必须要的,缩进值需要一样
`if <condition 1>:
<statement 1>
<statement 2>
elif <condition 2>:
<statements>
else:
<statements>`
- elif 的个数没有限制,可以是1个或者多个,也可以没有。
- else 最多只有1个,也可以没有。
- 可以使用 and , or , not 等关键词结合多个判断条件
值的测试
Python不仅仅可以使用布尔型变量作为条件,它可以直接在if中使用任何表达式作为条件。
大部分表达式的值都会被当作True,但以下表达式值会被当作False:
- False
- None
- 0
- 空字符串,空列表,空字典,空集合
循环
while循环
while <condition>:
<statesments>
Python会循环执行<statesments>
,直到<condition>
不满足为止。
for循环
for <variable> in <sequence>:
<indented block of code>
for 循环会遍历完中所有元素为止
continue语句
遇到 continue 的时候,程序会返回到循环的最开始重新执行。
break语句
遇到 break 的时候,程序会跳出循环,不管循环条件是不是满足
else语句
与 if 一样, while 和 for 循环后面也可以跟着 else 语句,不过要和break一起连用。
- 当循环正常结束时,循环条件不满足, else 被执行
- 当循环被 break 结束时,循环条件仍然满足, else 不执行