全网最详细的Python基础知识(6)看了就是赚了
字符串详细讲解
字符串的替换
- replace()—替换字符,将某一串字符串中的某一个字符替换成另一个字符
情况一:
a = 'abc'
print(a.replace('a','H'))
print(a)
>>>Hbc
abc
意思是将abc中的a字符替换成H字符,但是替换前的a变量的字符串是不会改变的,可以理解成临时替换
情况二:
a = 'abcbb'
print(a.replace('b','H',2))
print(a)
>>>aHcHb
abcbb
当替换一个字符串中出现重复的字符,可以增加一个参数,这个参数用来规定替换几次,例如上述代码中的2,意思是将原来字符串中的两个b替换成H,如果是3,就是将三个b替换成H
对于字母单词的操作
- title()将字符串中首字母大写,以标题的形式
a = 'hello python'
print(a.title())
print(a)
>>>Hello Python
hello python
每个单词的开头字母都会转成大写
- upper()全部字符转为大写
a = 'abc'
print(a.upper())
print(a)
>>>ABC
abc
- lower()全部字符转为小写
a = 'ABC'
print(a.lower())
print(a)
>>>abc
ABC
- capitalize()将第一个单词的首字母转为大写
a = 'hello python'
print(a.capitalize())
print(a)
>>>Hello python
hello python
注意:1、以上方法都只适用于字符串且单词或字母形式;2、title和capitalize重点注意,一个是将所有单词首字母大写,一个是只大写第一个单词首字母
对于多余空格操作
概念:在后面我们学习了爬虫后,会经常使用到;当我们爬取一些信息,以字符串的形式存储时,往往会多出一些无法手动删除的空格,这时候就需要我们使用这些方法来去除
- strip()去除字符串两边的空格
- lstrip()去除字符串左边的空格
- rstrip()去除字符串右边的空格
l代表left,r代表right;python中经常使用这种方法命名
a = ' python '
b = ' java'
c = 'php '
print(a.strip())
print(b.lstrip())
print(c.rstrip())
>>>python
java
php
提示:如果只是右边或左边有空格,可以直接使用strip也是可以的,并且不会报错,因为strip是去除右边和左边的空格
字符串的切割与查找
- split()将字符串以什么格式切割,需要填写参数,参数代表切割的格式
a = 'hello python'
print(a.split(' '))
>>>['hello', 'python']
上述是以空格的格式切割,返回的就是hello和python,并且以列表的形式返回,如果是将参数变成p:
a = 'hello python'
print(a.split('p'))
>>>['hello ', 'ython']
那么返回的就是右边有空格的hello以及ython;参数后面可以再加一个参数,用来控制切割次数,默认是切割一次
a = 'abcbdbe'
print(a.split('b',3))
>>>['a', 'c', 'd', 'e']
- find()当字符串很长且很多时,会使用find去查找你所需要的字符
a = 'hello python'
print(a.find('h'))
>>>0
意思是查找h字符所对应的索引下标,这里空格也是算一个字符,如果查找的是p,返回的就是6;但如果查找的字符不存在,返回的就是-1
字符串的判断
- isalpha()判断是否为全英文的字符串
- isdigit()判断是否为全数字
- istitle()判断时否为首字母大写的
- islower()判断时否为全部小写的
- isupper()判断是否为全部大写的
以上一般与if…else一起使用,下面代码展示其中一个,剩下的都是一样的使用
a = 'Hello python'
if a.istitle():
print(True)
else:
print(False)
>>>False
字符串的制表符、换行符以及去除转义符
- \t水平制表符,俗称空格;默认8个空格为一组;所以使用后会让每一行对齐
print('hello\tpython')
>>>hello python
- \n换行符,强制换行
print('hello\npython')
>>>hello
python
- r去除转义,当我们需要打印\t、\n这种本身在python中又意义的字符时,在最前面加上r可以去除它们本身的意义,让其变成没有意义的符号,但去除转义不会真正删除它原本的意思
print(r'\t,\n')
>>>\t,\n
编码格式
最早出现的是Unicode的编码格式,这种格式希望让所有语言都是用,但是英国不想使用,于是出现了utf-8以及utf-16格式(在使用时utf的大写或小写没有关系);最后为了国际统一,出现了ASCII编码格式,这种称为国际通用编码格式,但中国的编码格式是gbk(要么全大写,要么全小写,禁止出现有大写有小写)Unicode编码格式是存在于python内核中的
- 编码:encode()
a = '拾柒'
b = a.encode(encoding='utf-8')
print(b)
>>>b'\xe6\x8b\xbe\xe6\x9f\x92' #b代表的是bytes数据类型,是编码后独有的
- 解码:decode()
a = b'\xe6\x8b\xbe\xe6\x9f\x92'
print(a.decode('utf-8'))
>>>拾柒
字典
概念
结构:由键和值组成,简称为键值对,且键值对封装在大括号中{‘keys’:‘values’}
可以使用dict关键字来定义字典
a = dict(b=1,c=2)
print(a)
>>>{'b':1,'c':2}
方法
- get()获取字典中的值
a = {'num':123}
print(a.get('num'))
>>>123
如果get获取的值不存在,则会返回None,并不会报错,表示什么都没有
- setdefault()查询,有两个参数,第一个是键,第二个是值;如果键值对存在,则查询它的值;如果不存在,则添加这个键值对
a = {'num':123}
print(a.setdefault('str',111))
print(a)
>>>111
{'num': 123, 'str': 111}
- keys()查询所有键
- values()查询所有值
a = {'num': 123, 'str': 111}
print(a.keys())
print(a.values())
>>>dict_keys(['num', 'str'])
dict_values([123, 111])
将所有键和值分别查询出来,dict代表字典,keys代表键,dict_keys就代表键;都是以列表的形式返回
- update()修改值,如果修改的值不存在,则添加这个键值对
a = {'num': 123, 'str': 111}
a.update({'name':'shiqi','str':222})
print(a)
>>>{'num': 123, 'str': 222, 'name': 'shiqi'}
注意,修改时也要加大括号
- pop()删除指定的键值对
a = {'num': 123, 'str': 111}
a.pop('num')
print(a)
>>>{'str': 111}
删除num键以及值,一次只能删除一条
- popitem()随机删除一个键值对,实际上是根据添加的先后顺序删除最后添加的那一个
a = {'num': 123, 'str':111,'name':'shiqi'}
a.popitem()
print(a)
>>>{'num': 123, 'str': 111}
集合
定义
集合也是以大括号的形式,当字典中只有键却没有值时,就变成了集合;集合的值时唯一且无序的,如果出现重复的值,集合会自动去重;集合不能为空,一旦为空了,就成了字典,只有字典可以为空字典,集合必须要有数据
集合的交并差
- 交集:set1&set2
- 并集:set1|set2
- 差集:set1-set2(所得结果以前面的为主)
set1 = {1,2,3,4,5}
set2 = {5,1,3,8,9}
set3 = {1,2,3,4}
set4 = {5,6,7,8}
set5 = {1,2,3,4,5}
set6 = {5,1,3,8,9}
print(set1&set2)
print(set3|set4)
print(set5-set6)
>>>{1, 3, 5}
{1, 2, 3, 4, 5, 6, 7, 8}
{2, 4}
主要解释一下最后的差集,交集和并集比较简单,就不做过多讲解;来看差集,set5和set6相同的部分是1,3,5;当它们相减后,重复的部分没有了,set5剩下的是2,4;set6剩下的是8,9;所谓结果以前面的为主就是说,相减后剩下的,哪个集合在前,就打印哪一个的结果;这里很明显set5在set6前,所以打印的是2,4;如果说set6在set5前,则打印的是8,9
集合的增和删
- 添加单个:add()
- 添加多个:update()
- 删除最前面的:pop()
- 根据值删除:remove()
set1 = {1,2,3,4}
set1.add(5)
set1.update({6,7,8})
print(set1)
set1.pop()
set1.remove(2)
print(set1)
>>>{1, 2, 3, 4, 5, 6, 7, 8}
{3, 4, 5, 6, 7, 8}
运算符总结
身份运算符
- is
- is not
成员运算符
- in:判断前面的元素是否属于后面的数据之中
- not in:去反
a = ['a','b','c']
b = 'b'
if b in a :
print(True)
else:
print(False)
>>>True
a = ['a','b','c']
b = 'b'
if b not in a :
print(True)
else:
print(False)
>>>False
上节课作业答案
#第一题(和while循环原理一样,同学们先自己理解一下,实在不行,私信或者评论区)
for x in range(1,10):
for y in range(1,x+1):
print('%d*%d=%d'%(y,x,x*y),end='\t')
print('\n')
#第二题
#while循环的方法
li = [1,1,1,2,2,3,2,3,4,2,3,5,4,5,4]
i = 0
while i < len(li): #len()是查看列表的长度,同学们记一下,以后会经常用到
if li.count(li[i])>1: #如果统计出某个元素的个数大于1则删除li[i]下标所对应的值,例如li[0]所对应的是数字1,而count(1)有三个大于1,则删除;此时列表长度减一,现在li[0]还是1,继续删除,当只有一个1时,if条件不满足,执行else代码对i加一,此时li[i]为2,因为两个1删除了,所以下标0对应的是数字1,下标1对应的是数字2;剩下的以此类推
li.remove(li[i])
else:
i += 1
li.sort()
print(li)
#for循环的方法
li = [1,1,1,2,2,3,2,3,4,2,3,5,4,5,4]
for number in li.copy(): #对列表进行复制,这里只能用copy,不能用=;将复制的列表遍历,并储存在变量number中
if li.count(number)>1: #跟上面方法类似,第一个数字是1,总共三个1,大于1;将li列表中删除复制出来的第一个数1
li.remove(number)
li.sort()
print(li)
第一种方法比较好理解,第二种相对复杂一点,建议大家打印一下遍历后的number来看
今日作业
- 定义两个有重复元素的列表,打印出重复元素
- 统计一串字符中a-z出现的个数,忽略大小写
- 利用26个字母和9个数字,随机生成10个8位密码;提示:random.choices(‘a-z0-9’,k=8)第一个参数是范围,第二个参数是生成几位数
- 判断用户输入的是不是手机号(11位数字)
今天的内容就到这里,感谢大家的支持;从下周开始,我要去上学了,只能一周一更了,请大家见谅