python基础
Posted blog-apply
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础相关的知识,希望对你有一定的参考价值。
输入和输出:
输入:input (输入的数据类型是str型)
输出:print (输出多个值时中间用逗号隔开,sep可以指定多个值之间的连接符)
eg:print(age,7000,sep‘+’)
500+7000
变量:
定义:python中的变量是在第一次赋值的时候就已经定义了
常见数据类型:
1、数字类型:Number
-
(1)int 整型。通常被称为是整型或整数,是正或负整数,不带小数点
(2)float 浮点。由整数部分与小数部分组成
(3)complex:复数。由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
eg:定义:num = 4+3j 4为实部 3为虚部
(4)运算:
加法:3+4
减法:4-3
乘法:3*4
除法:4/3
取整:3 // 2
取余:6 % 4
次方:2**3(2的3次方)
2、字符串:string
-
(1).字符串的拼接:
var = ‘hello‘
var1 = “world!”
var 3= ‘1‘
var4 = var + var1
print(var4)
print(var,var1)
print(var+‘, ‘+var1)
(2).下标索引:字符串的索引分为正数和负数
正数下标从左往右,从0开始,最后一个下标是len(a)-1;
负数下标从右往左,从-1开始,最后一个下标是-len(a)
(3)截取:
正数下标a[3:5] 截取的是下标为3的元素到下标为4的元素,冒号右边下标对应的元素不会截取到;
负数下标a[-4:-1] 截取的是下标为-1的元素倒下标为-4的元素,冒号右边下标对应的元素不会截取到;
索引截取:var = ‘hello world!‘
print(var)
print(var[2::2])
结果为:lowrd
从下标为2的元素开始,隔两个取一个元素
var = ‘hello world!‘
print(var)
print(var[::-1])
结果为:dlrow olleh
从下标为-1的元素开始向左倒取
var = ‘hello world!‘
print(var)
print(var[3::-2])
结果为:le
从下标为3的元素开始,按负数下标原则,向左倒取,隔两个取一个元素
?
(4).字符串的函数:
1.len:返回字符串的长度
eg:a = ‘hello world‘
print(len(a))
结果为:11
2.count:查看出现的次数
eg:a = ‘hello world‘
a.count(‘l‘)
结果为:3
表示‘l’在a字符串中出现了三次
3.capitalize:将字符串的第一个字符转换为大写
eg:a = ‘hello world‘
a.capitalize()
结果为:Hello world
4.center:返回一个固定宽度且居中的字符串,剩余内容由指定的字符填充,若不指定填充字符,默认空格填充
eg:a = ‘hello world‘
a.center(20,‘*‘)
结果为:*****hello world*****
5.find:检测输入内容是否在字符串中
eg:a = ‘hello world‘
a.find(‘o‘)
结果为:4
显示的是查找字符的下标,默认显示第一次出现的下标
eg:a = ‘hello world‘
a.find(‘o‘,3,5)
结果为:4
显示查找字符的下标,后面可添加范围,范围用下标表示
6.replace:将字符串中的某些内容进行替换
eg:a = ‘hello world‘
a.replace(‘o‘,‘#‘)
结果为:hell# w#rld
默认全部替换
eg:a = ‘hello world‘
a.replace(‘o‘,‘#‘,1)
结果为:hell# world
添加替换次数,则从头开始按次数替换
7.split:以输入内容为分隔符截取字符串
eg:a = ‘hello world‘
a.split(‘o‘,1)
结果为:hell world
以‘o’为分割符把该字符串分割成两个,作为分隔符的字符会取消输出,后面数字代表分割几次(建议分隔符使用不需要的内容来作为)
8.index:跟find方法相同,只不过若输入内容不在字符串中会报错
eg:a = ‘hello world‘
a.index(‘e‘,0,3)
结果为:1
显示下标,若输入内容在字符串中没有,则会报错,可以根据下标指定范围(出现错误后面的代码则不执行,若想之后的代码继续执行,建议使用 find)
9.isalnum:如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回 False
eg:a = ‘hello world‘
a.isalnum()
结果为:true
eg:a = ‘hello world%‘
a.isalnum()
结果为:false
10.isalpha:如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回False
eg:a = ‘helloworld‘
a.isalpha()
结果为:true
11.isdigit:字符串只包含数字则返回True否则返回False
eg:a = ‘hello world‘
a.isdigit()
结果为:false
12.islower:如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回False
eg:a = ‘hello world‘
a.islower()
结果为:true
13.isspace:如果字符串中只包含空格,则返回True,否则返回False
eg:a = ‘hello world‘
a.islower()
结果为:false
14.istitle:检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
eg:a = ‘hello world‘
a.istitle()
结果为:false
15.lower:转换字符串中所有大写字符为小写
eg:a = ‘Hello world‘
a.istitle()
结果为:hello world
16.max:返回字符串 str 中最大的字母。
eg:a = ‘hello world‘
max(a)
结果为:w
17.min:返回字符串 str 中最小的字母
eg:a = ‘hello world‘
min(a)
结果为:‘ ‘(空格)
以ASCII码表为基准
18.startswith:检查字符串是否是以 obj 开头,是则返回True,否则返回False
eg:a = ‘hello world‘
a.startswth(‘h‘)
结果为:true
eg:a = ‘hello world‘
a.startswith(‘hel‘)
结果为:true3、列表:list
-
列表的定义:
方式一:list1 = [] 常用
方式二:list2 = list()
下标索引:
与字符串规则一致
正数下标从左往右,从0开始,最后一个下标是长度减一
负数下标从右往左,从-1开始,最后一个下标是负长度
列表截取:
names = [‘tom‘,‘LISI‘,56,78,89]
#取下标对应的元素
#print(names[-1])
?
#截取一段:
#print(names[1:5])
?
#截取下标为2的元素后面的所有内容
#print(names[2:])
#print(names[-4:])
列表嵌套:输出列表里嵌套的列表的某个值
names = [‘tom‘,‘LISI‘,56,‘哈哈‘,2,‘safe‘,[‘1‘,2,4],78,89]
print(names[6][1])
列表方法:
1、.append:在列表末尾添加新的对象
eg:names = [‘a‘,‘b‘,‘c‘]
print(names)
names.append(‘d‘)
print(names)
结果为:[‘a‘,b‘,‘c‘,‘d‘]
2、.count:统计某个元素在列表中出现的次数
eg:names = [‘a‘,‘b‘,‘c‘,‘c‘]
print(names)
a = names.count(‘c‘)
print(a)
结果为:2
3、.extend:在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
eg:names = [‘a‘,‘b‘,‘c‘]
print(names)
list1 = [24,25,26]
names.extend(list1)
print(names)
结果为:[‘a‘,b‘,‘c‘,24,25,26]
4、.index:从列表中找出某个值第一个匹配项的索引位置,索引从0开始
eg:names = [‘a‘,‘b‘,‘c‘]
print(names)
names.index(‘c‘)
print(names)
结果为:2
输入元素值,结果显示的是下标
5、.insert:将对象插入列表
eg:names = [‘a‘,‘b‘,‘c‘]
print(names)
names.insert(1,5)
print(names)
结果为:[‘a‘,‘b‘,5,‘c‘]
eg:names = [‘a‘,‘b‘,‘c‘]
print(names)
list1 = [‘ds‘]
names.insert(1,list1)
print(names)
结果为[‘a‘,‘b‘,[‘ds‘],‘c‘]
6、.pop(index) :移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
eg:names = [‘a‘,‘b‘,‘c‘]
print(names)
names.pop(1)
print(names)
结果为:[‘a‘,‘c‘]
移除时输入元素的下标
7、.remove(obj): 移除列表中某个值的第一个匹配项
eg:names = [‘a‘,‘b‘,‘c‘,‘a‘,‘d‘,‘a‘]
print(names)
names.remove(‘a‘)
print(names)
结果为:[‘b‘,‘c‘,‘a‘,‘d‘,‘a‘]
8、.reverse():反向列表中元素,倒转
eg:names = [‘a‘,‘b‘,‘c‘,‘a‘,‘d‘,‘a‘]
print(names)
names.reverse()
print(names)
结果为:[‘a‘,‘d‘,‘a‘,‘c‘,‘b‘,‘a‘]
9、.sort([func]): 对原列表进行排序
eg:names = [24,15,36,26,31,29]
print(names)
names.sort()
print(names)
结果为:[15,24,26,29,31,36]
4、元组:tuple
-
定义元组:
如果只有一个元素,必须在元素后加‘,‘;
元组里可以存放任意类型的数据;
一旦定义,不可更改;
不可添加,不可分割
方式一:tup1 = (‘dfs’,)
方式二:tup2 = tuple()
元组索引与列表、字符串规则一致。
截取:tup1 = ("sadfsa",["sda","sds",45],(34,45))
print(type(tup1))
输出类型为:tuple
print(tup1[1])
截取元组中下标为1的元素是一个列表,显示为:[‘sda‘,‘sds‘,45]
print(tup1[1][-1])
截取元组中下标为1的元素是一个列表中的下标为-1的元素,显示为:45
print(tup1[1:])
截取元组中下标为1的元素及后面所有的元素,显示为:(["sda","sds",45],(34,45)
?
元组常用函数:
1.len(tuple):计算元组元素个数
eg:tup1 = (‘a‘,‘b‘,‘c‘)
print(len(tup1))
2.max(tuple):返回元组中元素最大值
eg:tup1 = (‘a‘,‘b‘,‘c‘)
print(max(tup1))
3.min(tuple):返回元组中元素最小值
eg:tup1 = (‘a‘,‘b‘,‘c‘)
print(min(tup1))
4.tuple(seq):将列表转换为元组
eg:list1 = [1,2,3]
a = tuple(list1)
print(a)
5、集合
-
定义:
方式一:set1 = set()定义空集合
方式二:set2 = {123}
特点:无序不重复元素,去重,没有下标索引,支持集合运算
?
类型转换:list1 = [1,2,3]
set1 = set(list1)
print(set1)
列表转集合
?
集合运算:
a = t | s # t 和 s的并集
b = t & s # t 和 s的交集
c = t – s # 求差集(项在t中,但不在s中)
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
?
常用操作:
1.添加一个元素 s.add()
eg:s1 = {1,2,3}
s1.add(4)
print(s1)
2.删除一个元素 s.remove()
eg:s1 = {1,2,3}
s1.remove(2)
print(s1)
3.删除整个集合 del (s)
eg:s1 = {1,2,3}
del(s1)
print(s1)
4.长度计算 len(s)
eg:s1 = {1,2,3}
len(s1)
print(s1)
6、字典:dict
-
定义:
方式一:t1 = {} 定义空字典
方式二:t1 = dict()
t1= {键:值,键:值}
t1= {key1:value1,key2:value2}
?
特点:
以键值对的形式存放,键要唯一;
不是通过索引存取;
值可以是任意数据类型
常用操作:
1. print(dict[‘thrid‘]) 后台打印键为thrid的值
2. dict[‘thrid‘] = ‘网易‘ 将键为thrid的值修改成‘网易‘
3. del dict[‘second‘] 删除键为second的键值对
4. dict.clear() 清空字典
5. del dict 删除字典
字典函数:
1.clear() 删除字典内所有元素
?
2.copy() 复制
eg:t1 = {}
t2 = t1.copy
print(t2)
3.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
eg:t1 = {}
t2 = t1.fromkeys(‘zaq‘,‘s‘)
print(t2)
结果为:{‘z‘:‘s‘,‘a‘:‘s‘,‘q‘:‘s‘}
4.get() 返回指定键的值,如果值不在字典中返回default值
eg:t1 = {a:b,c:d}
e = t1.get(a)
print(e)
5.keys() 以列表返回一个字典所有的键
eg:t1 = {a:b,c:d}
e = t1.keys()
print(e)
6.setdefault 和get()类似,但如果键已经不存在于字典中,将会添加键并将值设为default
eg:t1 = {a:b,c:d}
t1.setdefault(e)
print(t1)
如果键存在,不会对原有键和值进行修改
7.update(dict2) 把字典dict2的键值对更新到dict里
eg:t1 = {a:b,c:d}
t2 = {a1:b1,c1:d1}
t1.update(t2)
print(t1)
8.values() 以列表返回字典中的所有值
eg:t1 = {a:b,c:d}
a = t1.values()
print(t1)
控制结构:
-
分支结构(判断):if elif else语句
-
循环结构:for循环可以遍历列表
1.for循环:for 变量 in 次数/列表
执行的语句
for循环可以遍历输出列表的元素,注意循环次数是由列表中的元素个数控制的
eg:
names = [‘hello‘,‘tom‘,‘hu‘]
for one in names:
print(one)
eg:
for one in range(1,10):
print(one)
输出1到九
for one in range(1,100,5):
print(one)
输出1到100,隔5个取一次
?
2.while循环:while 条件:
执行语句
3、break和continue:
break:终止整个循环
continue:终止本次循环
字符串格式化输入:
-
方式一:
print("%s的年龄是%d" %(name,age))
注意:%s代表字符串,%d代表整数,%f代表浮点数
方式二:format
print({0}的年龄是{1}.format(name,age))
注意:format在输入值的时候是根据位置传递的,可以在{}指定参数位置,下标传递
方式三:
print(f"{name}的年龄是{age}")
函数:function
-
定义:Python定义函数使用def关键字,函数名的命名规则和变量类似,要先定义再调用
函数名为自定义名称,参数列表为传入的参数
def 函数名 (参数列表)
函数体
直接输出函数名,会输出函数的内存地址
作用:函数用于将相关功能打包并参数化
1、必填参数:一旦定义,调用时必须传入值,多个参数定义的时候中间使用逗号隔开
2、默认参数:函数参数定义的时候指定默认值,在函数调用的时候可以不输入值,如果不传入则使用默认值,如果传入值,就是传入的新值
3、可变参数(不定长参数):* 可以接收在调用时传入的多个值,存放在元组中
4、关键字可变数量参数:**
定义完成后传入的值要以键值对的形式传入,传入的值为一个字典
注意:上述四种参数参数位置不可改变
函数里面可以继续调用其他函数
?
函数的返回值:
递归函数:当一个函数在函数体内调用其本身时,这个函数就称为递归函数
模块和包:
-
模块:python中一个.py文件就是一个模块
能避免函数名、变量名重名,增加代码的可读性
导入模块:import 模块名 (导入内置模块)
方式一:import 模块名
模块名.函数名()
方式二:from 模块名 import 函数名
调用 (导入单个函数)
from 模块名 import 函数名,函数名
调用 (导入多个函数)
from 模块名 import *
调用 (导入全部函数)
方式三:import 包名.模块名 as 模块名
模块名.函数名() (导入指定模块)
方式四:import 包名.模块名,包名.模块名
包名.模块名.函数名()
方式五:form 包名.模块名 import 函数名,函数名
调用 (导入多个函数)
方式六:from 包名.模块名 import *
调用 (导入某个模块的所有函数)
包:python新建的包里都会有一个__inint__.py文件(初始化文件),一般是包里面存放着模块
正则表达式:
-
访问这个网址: https://regex101.com/ 来验证正则表达式的正确性
元字符:metacharacters
它们出现在正则表达式字符串中,不是表示直接匹配他们, 而是表达一些特别的含义。
包含: . * + ? [ ] ^ $ { } | ( )
1、点-匹配所有字符,表示要匹配除了换行符之外的任何单个字符
比如,从下面的文本中选择出所有的颜色
苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的
也就是要找到所有以 色 结尾,并且包扩前面的一个字符的词语。就可以这样写正则表达式 .色
其中 点 代表了任意的单个字符, .色 合起来就表示要找任意一个字符后面是 色 这个字,合起来两个字的字符串
eg:import re
p = re.compile(r‘.色‘)for one in p.findall(content):
print(one)
2、星号-重复匹配任意次,表示匹配前面的子表达式任意次,包括0次
比如,要选择每行逗号后面的字符串内容,包括逗号本身。
苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,
就可以这样写正则表达式 ,.* *紧跟在 . 后面, 表示任意字符可以出现任意次,所以整个表达式的意思就是在逗号后面的所有字符,包括逗号
eg:import re
p = re.compile(r‘,.*‘)for one in p.findall(content):
print(one)
注意: .* 在正则表达式中非常常见,表示匹配任意字符任意次数。当然这个 * 前面不是非得是 点 ,也可以是其它字符
4、加号-重复匹配多次,表示匹配前面的子表达式一次或多次,至少匹配一次,不包括0次
比如,要从文本中选择每行逗号后面的字符串内容,包括逗号本身。但是添加一个条件,如果逗号后面没有内容,就不要选择了。
苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,
就可以这样写正则表达式 ,.+
5、问号-匹配0-1次,匹配前面的子表达式0次或1次
比如,要从文本中,选择每行逗号后面的1个字符,也包括逗号本身
苹果,绿色的
橙子,橙色的
香蕉,黄色的
乌鸦,黑色的
猴子,
就可以这样写正则表达式 ,.?
6、花括号-匹配指定次数,表示前面的字符匹配指定的次数
比如 ,下面的文本
红彤彤,绿油油,黑乎乎乎乎,绿油油油油
?
表达式 油{3} 就表示匹配连续的 油 字3次
表达式 油{3,4} 就表示匹配连续的 油 字至少3次,至多4次
?
***贪婪模式和非贪婪模式
贪婪模式:在正则表达式中, ‘*’, ‘+’, ‘?’ 都是贪婪地,使用他们时,会尽可能多的匹配内容
非贪婪模式:也就是在后面加上 ?
7、对元字符的转义
反斜杠 在正则表达式中有多种用途。比如,我们要在下面的文本中搜索所有点前面的字符串,也包含点本身
苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的
如果,我们这样写正则表达式 .*. , 肯定不对,因为 点 是一个元字符,直接出现在正则表达式中,表示匹配任意的单个字符,不能表示 . 这个字符本身的意思了,如果我们要搜索的内容本身就包含元字符,就可以使用 反斜杠进行转义,使用这样的表达式: .*.
eg:import re
p = re.compile(r‘.*.‘)for one in p.findall(content):
print(one)
反斜杠后面接一些字符,表示匹配 某种类型 的一个字符
d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9]
D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9]
s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [ fv]
S 匹配任意一个非空白字符,等价于表达式 [^ fv]
w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_],缺省情况也包括Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母
W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_]
反斜杠也可以用在方括号里面,比如 [s,.] 表示匹配 :任何空白字符,或者逗号,或者点
8、方括号-匹配几个字符之一,表示要匹配 指定的几个字符之一
[abc] 可以匹配 a, b, 或者 c 里面的任意一个字符。等价于 [a-c] 。
[a-c] 中间的 - 表示一个范围从a 到 c
如果在方括号中使用 ^ , 表示 非 方括号里面的字符集合,[^d] 表示,选择非数字的字符
9、起始、结尾位置 和 单行、多行模式
^ 表示匹配文本的 开头 位置。
正则表达式可以设定 单行模式 和 多行模式
如果是 单行模式 ,表示匹配 整个文本 的开头位置,如果是 多行模式 ,表示匹配 文本每行 的开头位置。
content = ‘‘‘001-苹果价格-60
002-橙子价格-70
003-香蕉价格-80‘‘‘
eg:import re
p = re.compile(r‘^d+‘, re.M)for one in p.findall(content):
print(one)
注意:compile 的第二个参数 re.M ,指明了使用多行模式
$ 表示匹配文本的 结尾 位置。
如果是 单行模式 ,表示匹配 整个文本 的结尾位置,如果是 多行模式 ,表示匹配 文本每行 的结尾位置
比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格001-苹果价格-60,002-橙子价格-70,003-香蕉价格-80,如果我们要提取所有的水果编号,用这样的正则表达式 d+$
10、竖线-匹配两者之一,表示 匹配 前者 或 后者,竖线在正则表达式的优先级是最低的, 这就意味着,竖线隔开的部分是一个整体
11、括号-组选择,括号称之为正则表达式的 组选择,是从正则表达式匹配的内容里面扣取出其中的某些部分
从下面的文本中,选择每行逗号前面的字符串,也 包括逗号本身
苹果,苹果是绿色的
橙子,橙子是橙色的
香蕉,香蕉是黄色的
就可以这样写正则表达式 ^.*, 。
但是,如果要求 不要包括逗号 呢,当然不能直接这样写 ^.* 因为最后的逗号是特征所在,如果去掉它,就没法找逗号前面的了,但是把逗号放在正则表达式中,又会包含逗号,所以使用组选择符 : 括号,我们这样写 ^(.*),
eg:import re
p = re.compile(r‘^(.*),‘, re.MULTILINE)for one in p.findall(content):
print(one)
可以多次使用,我们要从下面的文本中,提取出每个人的 名字 和对应的 手机号
张三,手机号码15945678901
李四,手机号码13945677701
王二,手机号码13845666901
可以使用这样的正则表达式 ^(.+),.+(d{11})
eg:import re
p = re.compile(r‘^(.+),.+(d{11})‘, re.MULTILINE)for one in p.findall(content):
print(one)
以上是关于python基础的主要内容,如果未能解决你的问题,请参考以下文章