Python基础知识总结

目录

组合数据类型

1.1 序列类型通用操作符和函数

1.2 集合类型

1.3 映射类型

数值操作

2.1 各种运算符

字符串操作

3.1 字符串切片

3.1.1 基本切片

3.1.2 高级切片操作

3.2 操作符、相关函数、相关使用方法

3.3 字符串格式化

3.3.1 format{}格式化

3.3.2 %格式化

列表

4.1 一些细节

4.2 列表推导式

字典

5.1 一些细节

5.2 统计出现次数并从小到大排序

5.2.1 统计出现次数

5.2.2 排序

5.2.3 整合

元组、集合

选择结构

循环结构

8.1 continue和break

8.2 for循环

8.3 while循环

8.3.1 while-else语句

函数

9.1 global语句

9.2 递归

一些常见的库

10.1 math库

10.2 random库

10.3 jieba库

10.4 time库

txt文件读写


 

组合数据类型

        组合数据类型分为序列类型(字符串str、元组tuple、列表list)、集合类型(集合set)和映射类型(字典map)

1.1 序列类型通用操作符和函数

操作符描述
x in s如果x是s的元素,返回True,否则返回False
x not in s如果x不是s的元素,返回True,否则返回False
s + t连接 s 和 t
s * n 或 n * s将序列 s 复制 n 次
s[i]索引,返回序列第 i + 1个元素
s[i : j]切片,不包括第 j 位元素
s[i : j : k]步骤切片,k表示步长,不写默认为1
len(s)序列 s 的长度
min(s)序列 s 的最小元素
max(s)序列 s 的最大元素
sum(s)序列 s 的求和(列表只含数字)
s.index(x)序列 s 中从左往右第一次出现 x 的索引
s.rindex(x)序列 s 中从右往左第一次出现 x 的索引
s.count(x)序列 s 中出现 x 的总次数

注: 序列类型是可迭代对象,可以直接使用for循环操作

a=[1,2,3,4,5]
for i in a:
    print(i,end='**')  #end是可选参数,不写默认为换行符'\n'
#得到1**2**3**4**5**

1.2 集合类型

        类似数学上的集合概念元素具有单一性,集合并没有自动升序排列的性质,可能是元素少的时候碰巧,可以使用sorted()函数来排序。(集合是具有确定性、互异性、无序性的,不要混淆)

        一般用于去除列表中的相同元素

list1=[5,1,3,7,9,9,2]
list1=list(set(list1))
print(list1)  #得到[1, 2, 3, 5, 7, 9]
# 可以看到这个自动升序了,但仅仅是碰巧。
print(set([1,3,8,-2,99,98,77,1,5,3,77,12]))  # 得到{1, 98, 3, 99, 5, 8, 12, 77, -2}
#  可以看到,这个就不会自动给你升序了集合并没有自动升序排列的性质

1.3 映射类型

        这个不太重要,只需要了解:

  1. 怎样增删键值对
  2. 怎样得到字典中键,值,键值对应的元组
  3. 一个键只能对应一个值

注:键(key)就是冒号左侧的值。值(value)就是冒号右面的数值。

数值操作

2.1 各种运算符

算数运算符描述
x%y求得商的余数。例如:5%2结果为1
x//y求得x除y商的整数位,简称整除。例如5//2结果为2
x**y求得x的y次幂。例如4**(1/2)结果为2,3**2结果为9
比较运算符描述
x==y、x!=y判断x是否相等或者不相等,符合条件返回True,否则返回False
x>y、x<y判断x是否大于或小于y,符合条件返回True,否则返回False
x<=y、x>=y判断x是否大于等于或小于等于y,同样返回布尔值
赋值运算符描述
x=y将y的值赋值给x,注:当y是复杂数据类型时要使用.copy()的方法
x+=1等价于x=x+1
x-=1等价于x=x-1
x*=2等价于x=x*2
x/=2等价于x=x/2
逻辑运算符描述
and布尔运算“与”
or布尔运算“或”
not布尔运算“非”
优先级关系:or<and<not,同一优先级默认从左往右计算。
成员运算符描述
a in b如果a在b就返回True
a not in b如果a不在b就返回True

字符串操作

3.1 字符串切片

3.1.1 基本切片

格式:<需要处理的字符串>[M:N]。
M缺失表示至开头,N缺失表示至结尾
注意:

  1. 两种索引方式可以混用;
  2. 切片得到的结果不包含N索引的值。
a='零一二三四五六七八九'
print(a[1:3])#得到  一二
print(a[1:-1])#得到  一二三四五六七八
print(a[-3:-1])#得到  七八
print(a[:3])#得到  零一二
print(a[4:])#得到  四五六七八九

3.1.2 高级切片操作

格式:<需要处理的字符串>[M:N:K]。
根据步长K对字符串切片。不写K时默认为1,与[M:N]等价。

a='零一二三四五六七八九'
print(a[1:8:2])#得到  一三五七
#分析过程:在一~七中,索引从1开始,依次加2,即a[1],a[3],a[5],a[7],将其拼接在一起得到一三五七

print(a[::-1])#得到  九八七六五四三二一零
#得到逆序字符串,格式固定。可简单理解为从右至左操作选定的字符串片段[M:N]。

3.2 操作符、相关函数、相关使用方法

操作符描述
x+y连接两个字符串
x*n复制n次字符串x
x in s返回布尔值,如果字符串x在s内,则返回True,否则返回False
相关函数描述
len(x)返回字符串的长度。例如:len(‘我爱Python’)结果为8
str(x)将任意类型数据转为字符串。例如:str(123)结果为字符串"123",str([1,2])结果为字符串"[1,2]"
chr(x)返回Unicode编码的单字符。例如:chr(65)得到字母"A"
ord(x)返回单字符对应的Unicode编码。例如:ord(“a”)得到数字97
相关使用方法描述
str.lower() 、str.upper()返回将字符串全部变成小写或大写的副本。
例:‘abc’.upper()的结果为:‘ABC’
str.isalpha()返回布尔值,判断字符串str是否全部为字母
str.islower()、str.isnumeruic()返回布尔值,判断字符串str是否全部为小写或数字
如果记不住函数名。建议用循环和比较大小的方式判断每个字符是否符合标准
str.split(sep)将字符串按sep进行分割,当sep不填的时候默认以空格分割。
例:‘A,B,C’.split(‘,’)结果为:[‘A’,‘B’,‘C’]
str.strip()将字符串左右两边的空字符去掉,\n,\t,空格等。
例:’ \n我爱Python’.strip()结果为:‘我爱Python‘’
str.replace(old,new)返回副本,将字符串str中old字符替换为new字符。
例:下面有详细讲解

3.3 字符串格式化

类型格式规则
f格式化为浮点数,默认保留6位小数
e格式化为指数形式,默认小数点后保留6位有效数字
d格式化为十进制整数
x格式化为十六进制整数
o格式化为八进制整数
b格式化为二进制整数
s格式化为字符串

3.3.1 format{}格式化

默认左对齐

a=1.666
print('{0:-^20.1f}'.format(a))  # 得到--------1.7---------

0表示索引

:是引导符号

-是填充字符

^表示居中

20是输出总长度

.1表示保留一位小数

3.3.2 %格式化

a=1.555
print('%10.2f'%a)  # 得到      1.55

%表示引导符号

10表示宽度

.2表示保留两位小数

f表示转为浮点型

列表

注:前面已经介绍了一些通用函数了,可以上去看一看

函数描述
ls[i]=x将列表索引为 i 的元素更新为 x
ls.append(x)在列表最后添加 x
ls.insert(i,x)在列表的第 i 位添加元素x
del ls[i]删除列表索引为 i 的元素
ls.remove(x)删除列表中从左到右第一次出现的元素 x
ls.copy()得到列表的副本,对其操作不会影响原数据
ls.sort()将列表从小到大排序
ls.reverse()将列表反转
mylist=sorted(ls)将列表的副本从小到大排序,不会影响原顺序

4.1 一些细节

        列表中可以存放任意数据类型,但是不建议将其它数据类型强转为列表,而应该使用ls.append()的方法

print(list('我爱Python'))  # 得到['我', '爱', 'P', 'y', 't', 'h', 'o', 'n']
ls=[]
ls.append('我爱Python')
print(ls)  # 得到['我爱Python']

        将列表排序和反转,实际上是调用了sort()方法和reverse()方法,它们是没有返回值的,如果输入会得到None。

a=[1,3,2,6]
print(a.sort())  # 得到None
a.sort()
print(a)  # 得到[1,2,3,6]
# reverse同理

4.2 列表推导式

        可以浅浅看一下下面的例子

ls=[i for i in range(11)]  # 得到[0,1,2,3,4,5,6,7,8,9,10]
ls=[i for i in range(11) if i%5==0]  # 得到[5,10]
ls=[(i , j) for i in range(3) for j in range(11,13)]
# 得到[(0, 11), (0, 12), (1, 11), (1, 12), (2, 11), (2, 12)]

字典

dict1={'Python':'好','c':'也好'}

如上所示,冒号左边的为键,冒号右边的是键所对应的值。例如,Python对应的是好,c对应也好。

注:

  1. 键的存在是单一的,即一个字典一个键只能出现一次。
  2. 值的类型可以是任意类型,键不能是字典和集合,其他类型都可,但键和值通常为字符型
  3. 在字典中添加元素时,键与值出现是成对出现的。
函数描述
dict1[key]=value在字典中添加元素,如果key存在,则覆盖原来对应的值
list(dict1.keys())得到字典所有键的列表
list(dict1.values())得到字典所有值的列表
list(dict1.items())得到字典所有元组类型键,值的列表
dict1.get(key,default)如果键存在则返回对应的值,不存在则赋值为default
del dict1[key]删除这个键值对
key in dict1如果键在字典中则返回True,否则为False

5.1 一些细节

字典作为可迭代对象,其实是它的键值可迭代

dict1={'Python':'好','c':'也好'}
for i in dict1:
    print(i)
# 得到:Python,c

5.2 统计出现次数并从小到大排序

        这是这方面很经典的一种问题

5.2.1 统计出现次数

方法一:

list1=[1,1,1,2,5,3,3,10,5,6,8,9,9,11]
dict1={}  #创建一个空字典
for i in list1:
    dict1[i]=dict1.get(i,0)+1  # dict1.get(i,0)表示如果有键为i则返回对应的值,否则返回0
print(dict1)

方法二:

list1=[1,1,1,2,5,3,3,10,5,6,8,9,9,11]
dict1={}  #创建一个空字典
for i in list1:
    if i in dict1:  # 如果字典中有键为i
        dict1[i]+=1  # 对应的值加一
    else:  # 如果字典中没有键为i
        dict1[i]=1  # 创建键值对,值为1,因为这是第一次出现
print(dict1)

5.2.2 排序

mylist=list(dict1.items())
mylist.sort(key=lambda x:(-x[1],x[0]))
# 当写成mylist.sort(key=lambda x:(x[1],x[0]))是根据值从小到大排序
# 当写成mylist.sort()是根据键从小到大排序
print(mylist)  # 在此处可以直接根据需求进行其他操作,而不一定要转为字典
dict1=dict(mylist)  # 将列表转为字典
print(dict1)

        其实,sort里面有个可选参数reverse,默认为false,可以尝试一下在sort里面添加参数reverse=True看看效果。
        当你写成mylist.sort(key=lambda x:(x[1],x[0]),reverse=True)这样也能达到根据次数从大到小输出。

5.2.3 整合

list1=[1,1,1,2,5,3,3,10,5,6,8,9,9,11]
dict1={}  #创建一个空字典
for i in list1:
    dict1[i]=dict1.get(i,0)+1  # dict1.get(i,0)表示如果有键为i则返回对应的值,否则返回0
mylist=list(dict1.items())
mylist.sort(key=lambda x:(-x[1],x[0]))
dict1=dict(mylist)  # 将列表转为字典
print(dict1)

元组、集合

这个东西看具体需求了,简单介绍一下吧

元组: 可以被列表所代替,操作与列表操作相似,唯一不同的是元组不能修改,即不能增删元素,但可以使用切片和加法进行更新。

集合: 常用于清除相同元素,但是不具备自动排序的功能。(但是集合是具有确定性、互异性、无序性的,不要混淆)

选择结构

        这个无非就是if-elif-else分支了,这个写一写题目就可以学会,主要比较麻烦的就是判断的东西是个布尔值(true和false),在Python中其实是有一些等价的。

truefalse
数字1数字0
非空字符串空字符串
非空列表空列表
非空元组空元组
非空字典(集合)空字典(集合)
 None

循环结构

8.1 continue和break

continue:终止本层循环,继续下一层循环

break:跳出循环

8.2 for循环

一般配合range使用

8.3 while循环

形式为while + 条件判断语句。当条件返回True,则继续循环,否则结束循环。

8.3.1 while-else语句

当while语句执行完没有被中断,则会进入else语句。

如果while语句中途被中断了,则不会进入else语句。

函数

        就是把代码封装起来,可以通过return返回计算结果,这里需要理解一下形参和实参的区别就好了。

        形参就是在定义函数是括号内的参数,实参就是调用函数的参数。

9.1 global语句

        在函数中引入全局变量,可以直接对其进行修改。

全局变量:在主程序中定义的变量,既能在一个函数中使用,也能在其他的函数中使用

局部变量:只能在一部分代码中使用,例如for i in range(3)的 i 就是局部变量

9.2 递归

        递归其实就是重复调用函数的过程。最经典的就是斐波那契数列。

#斐波那契
n = int(input())
fib,i=[1,1],2
while True:
    if max(fib) < n:
        fib.append(fib[i-1] + fib[i-2])
        i += 1
    else:
        print(max(fib))
        break

一些常见的库

10.1 math库

常用函数描述
abs(x)得到x的绝对值
pow(x,y)得到x的y次幂,返回浮点型
sqrt(x)将x开平方,也可以直接x**(1/2)
exp(x)得到gif.latex?e%5E%7Bx%7D
sin(x)得到sin(x)
pi、e得到精确数值π、e

10.2 random库

常用函数描述
seed(x)当x确定时,产生随机数的顺序其实已经确定了
randint(a,b)生成[a,b]之间的随机整数(这里是两个闭区间)
choice(seq)从序列类型seq中随机选取一个元素
shuffle(seq)将序列类型seq随机打乱
random()生成[0.0,1.0)之间的随机小数
uniform(a,b)生成[a,b]之间的随机小数(这里是两个闭区间)

10.3 jieba库

常用函数描述
jieba.lcut(s)将字符串分词,返回一个列表
jieba.lcut(s , cut_all=True)全模式,返回字符串中字可能组成的所有词
jieba.add(s)在词库中添加词语 s

10.4 time库

常用函数描述
sleep(x)程序暂停x秒,常用在循环里

txt文件读写

        这个有一个要注意的地方就是,记得要用close()方法释放文件的使用权

打开模式描述
r以只读的方式打开
w覆盖写,文件不存在则会创建,存在则直接覆盖
a追加写,文件不存在会创建,存在则在文档末尾追加写
读文件的方法描述
f.read()返回一个字符串,内容是文件全部内容
f.readlines()返回一个列表,每一行的内容为每个元素
写文件的方法描述
f.write(x)字符串x写入

 

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值