字符串的多种方法

"""
字符串是算作序列类型的一种,可以进行索引和切片
但字符串跟元组一样,也是不可变的,这种情况下,
字符串内有一种方法可以将字符串内的部分内容进行替换,从而达到修改的效果
"""
# 替换
# 1、replace方法:在字符串中,将你选中的内容修改成你想更改的内容
str1 = '今天是周一,孑然老师又来带同学们上课了'
print(str1)
print(str1.replace('一', '四'))  # 将字符 一 替换成 四
​
# 在老数据与新数据之后,增加数字可以控制修改字符的次数
str2 = '我天天都要上课,今天也是一样'
print(str2)
print(str2.replace('天', '每', 1))  # 将 天 字替换成 每 字,只替换1次
​
# 分割
# 2、split方法:可以使用你指定的字符将字符串进行分割,分割之后的类型为列表类型
str3 = '吃饭,睡觉,打豆豆'
print(type(str3.split(',')))
print(str3.split(','))  
​
# 对于分割方法也有控制次数的方法
print(str3.split(',', 1))  # 只分割1次
​
# 查找
# 3、find方法:可以查找指定的元素的索引,缺点是只能输出第一次出现位置的索引
str5 = 'hello world'
print(str5.find('l'))  # 查找字符l第一次出现的索引位置
​
# 可以设置查找的起始索引与结束索引
# 在想查找的元素后面接上一个数字,为查找的起始索引
print(str5.find('l', 3))  # 从索引值为3开始查找,输出为从索引3开始,查找到l第一次出现的索引值为3
​
# 在查找的元素后面接上两个数字,用逗号分割,为查找的起始与结束索引
print(str5.find('l', 4, 10))  # 从索引值为4开始查找,直到索引值10为结束,查找到l第一次出现的索引值为9
​
# 转义字符(不常用),在print函数、文件操作、正则表达式等场景使用
# \n :换行   \t : 制表符
​
print('helloworld')
print('hello\nworld')  # 使用\n换行,字符串会将\n之后的内容另起一行进行输出
​
print('hello\tworld')  # 使用\t为水平制表符,相当于3个空格
print('hello   world')
​
# 当有多个打印内容使用水平制表符\t时将会默认以8个字符长度进行对齐
​
print('hello\tworld')
print('my\t\tworld')  # 如果下面打印的内容比上面少,可以多加一个水平制表符\t,这样两行打印的内容会以8个字符长度进行对齐
print('m\t\td')
​
# 取消转义字符: 如果在文件打开时有t开头的文件名需要取消转义字符时可以在前面多加一根右斜线
with open('D:\softData\PycharmProjects\ChengQuEdu\\textfile.txt', 'r') as f:
    print(f.read())
# 或者在文件的路径前加一个r
with open(r'D:\softData\PycharmProjects\ChengQuEdu\textfile.txt', 'r') as f:
    print(f.read())

字符串的其他方法(部分)

str1 = 'welcome to jieran‘s class'
​
print(str1.index('jieran'))  # 与find方法一样,输出查询内容的索引值位置开头。不同的点:当所查找的内容不在字符串中则会报错
​
print(str1.count('s'))  # 查找所选择的字符在字符串中出现的次数
​
print(str1.capitalize())  # 将字符串中第一个字符转换为大写字母
​
print(str1.title())  # 将所有单词的首字母大写
​
print(len(str1))  # 查看字符串的长度
​
str1 = '       welcome to jieran‘s class  '
print(str1)
print(str1.strip())  # 清除掉字符串中的首尾空格

字符串编码

当我们在计算机内部存储文本时,实际上是将每个字符转换成二进制编码来存储。而不同的字符集采用不同的转换方式,也就是编码格式,比如ASCII、UTF-8等。在 Python 中,字符串编码就是将字符串转换成这些二进制编码的过程。

为什么要进行字符串编码呢?因为计算机只能处理二进制数据,无论是存储还是传输,都需要将数据转换成二进制编码才行。所以,当我们需要存储或传输文本时,需要先将文本转换成二进制编码,这样计算机才能正常处理。Python 中的字符串编码,就是将 Unicode 编码格式的字符串转换成二进制编码的过程,以便存储和传输。

"""
字符串编码用于将文本转换为计算机可以理解和处理的二进制数据
常见字符串编码包括ASCII、UTF-8、GBK等
ASCII是最基础的字符编码,只表示128中字符,而utf-8和gbk等编码则可以表示更多的字符,包括中文、日语、汉语等非英语字母的字符。
在python3.x版本中默认采用Unicode编码
"""
str1 = '孑然'
encoded_utf8 = str1.encode('utf-8')  # 使用内置函数encode()可以将字符串转变成你想要的编码.
print(encoded_utf8)
decoded_utf8 = encoded_utf8.decode('utf-8')  # 使用内置函数decode()可以将编码转变回字符串.
print(decoded_utf8)
​
encoded_gbk = str1.encode('gbk')
print(encoded_gbk)
decoded_gbk = encoded_gbk.decode('gbk')
print(decoded_gbk)
​
print('========================================')
# 在python3.x的版本中默认使用unicode编码
s1 = '你好啊'
s3 = str(s1.encode('unicode_escape').decode())
print(s3)
s2 = '\u4f60\u597d\u554a'
print(s1 == s2)  # 输出 True

声明

有同学创建新的python文件之后会出现默认为GBK编码格式,导致运行代码时会发生错误,我们可以进入到pycharm的设置里,将文件的默认编码格式改为UTF-8

File-Settings-Editor-File Encodings,将Project Encoding中默认的GBK改为UTF-8,之后点击Apply应用即可

上节课作业

# 1、有一个列表info=[1,3,2,5,4],请通过两种方式将列表变成info=[5,4,3,2,1]
info = [1, 3, 2, 5, 4]
info.sort(reverse=True)
print(info)
​
info = [1, 3, 2, 5, 4]
print(sorted(info, reverse=True))
​
"""
2、一个列表中有重复元素,编写程序,移除重复元素。
   例如:
    原本的列表:li = [1, 1, 1, 2, 2, 3, 2, 3, 4, 2, 3, 5, 4, 5, 4]
    操作之后的列表: li = [1,2,3,4,5]
"""
li = [1, 1, 1, 2, 2, 3, 2, 3, 4, 2, 3, 5, 4, 5, 4]
# 方法1
# li1 = []
# for i in li.copy():
#     if i in li1:
#         continue
#     else:
#         li1.append(i)
# print(li1)
# 方法2
for i in li.copy():
    if li.count(i) > 1:
        li.remove(i)
li.sort()
print(li)

字典

接下来,我们要学习python中的第五种数据类型:字典,对于学习字典之前呢,我们可以先来看一下思考:列表几乎可以存储python中所有数据对象,如果列表中的一个元素需要修改,那就可以通过索引的值定位到该元素进行修改,如果列表中的某一个元素换了位置怎么办呢?

# 列表中的索引获取的示例
li = ['张三', '李四', '李华']
# 如果需要获取李四这个值,可以使用索引获取
str1 = li[1]
print(str1)
​
# 但如果李四与李华的位置发生了变化,那么原来的的索引值输出就不是李四了
li = ['张三', '李华', '李四']
str2 = li[1]
print(str2)  # 李华
​
# 而字典这个数据类型可以对于以上这个问题有着很好的一个解决
"""
    字典 dict
    创建方法: 以花括号包裹,其中字典中的每个元素都是由键值对组成
    在字典中键是唯一的,但是值可以为任何类型
"""
# 字典的创建 对于以上的列表元素,给每个元素添加一个学号其中用引号分隔(:)
di = {'1': '张三', '2': '李华', '3': '李四'}  # 前面的学号即为键,后面的名字即为值(键值对)
​
"""
对于字典的第二种创建方式:在键与值之间使用等号(=)连接,但是对于键的命名规范有要求,键必须是为字母或者下划线开头,后面可以跟任意字母、字符以及下划线
"""
di2 = dict(a=1, b=2)
print(type(di2))
print(di2)
​
# 空字典创建
empty_di = {}
​
# 字典的第三种创建方式,创建列表内容,将列表的内容直接转变为字典类型,前提是列表中的每个元素中都必须是两个值,否则会报错
li1 = [('1', '张三'), ('2', '李华'), ('3', '李四')]
print(type(li1))
print(li1)
di3 = dict(li1)
print(type(di3))
print(di3)
​
​
# 根据键的内容获取值:在字典中,元素的键相当于序列类型的索引,只不过键是自己定义的,而索引不是
# 获取李华这个值
print(di['2'])
​
# 如果输入的键不存在则会报错
# print(di['4'])  # 报错,显示键错误
​
# 同时,字典中的get方法与普通获取的内容一样,只是对于获取不存在的键不会报错,而是输出None
print(di.get('2'))
print(di.get('4'))  # None
# 对于查找不到什么键时可以指定返回什么数据
print(di.get('4','所输入的键未在字典中'))

字典的其他操作

"""
字典不同于元组,字典的值是可以变的,所以字典也可以进行增删改查的操作
"""
​
di = {'1': '张三', '2': '李华', '3': '李四'}
"""
修改与增加
可以通过键获取位置修改值的内容
形式: 字典名[键] = 值
如果输入的键在字典内不存在,则为新增一个新字典元素
"""
# 修改
# 把李华修改成孑然: 定位键,然后根据键修改后面的值
di['2'] = '孑然'
print(di)
​
# 增加
# 增加一个新的键,键为4,值为强哥
di['4'] = '强哥'
print(di)
​
"""
对于字典内置函数方法的修改与添加
    setfault 与 update
"""
# setdefault,字面意思为:设置默认值
print(di.setdefault('4', '天天'))  # 对于setdefault方法,如果里面输入存在的键,将他打印输出则会输出对应的值
print(di.setdefault('5', '阿明'))  # 如果输入的键不存在,那么会添加对应的键值对然后返回值
# print(di)
​
# update,字面意思与用法一样,意为:更新
di.update({'4': '小飞', 'a': '熊大'})  # 对于已存在的键,可以对其值进行修改,如输入的键不存在,则添加对应键值对
print(di)
​
"""
删除
pop():删除指定的键,返回value值
popitem():删除最后一对键值对
del:del关键字删除
"""
​
print("===========================")
print(di)
​
# 使用pop()方法删除键为a的键值对
print(di.pop('a'))  # 内容与值被删除, 如果打印这一行则输出的是被删除的值
print(di)
​
# 使用popitem()方法随机删除一对键值对,本质是随机删除,但是再python3.6版本之后自动有一个排序,所以就表现为删除末尾最后一个
print(di.popitem())  # 配合打印使用则回删除的键值对
print(di)
​
# 使用del关键字删除键为1的键值对
del di['1']  # 使用del关键字删除的代码无法使用print打印
print(di)
​
"""
获取字典视图:视图可以理解为在一堆内容中,提取一堆内容,将这一堆被提取的内容再汇总成新的内容
    对于字典的元素,可以使用keys()和values()方法分别单独获取所有元素中的键或者值
    还有item()方法得到里面所有的键值对
"""
print(di.keys())  # 获取字典中所有元素的键
print(di.values())  # 获取字典中所有元素的值
print(di.items())  # 获取字典中所有元素的键值对
​
# 可以把获取的键或者值转变成我们想要的数据类型
li_keys = list(di.keys())  # 将获取的键转变为列表类型
print(li_keys)
print(type(li_keys))
​
li_values = tuple(di.values())  # 将获取的值转变为元组类型
print(li_values)  # 通常对于获取的值都是会转变为列表类型
print(type(li_values))
​
lis = list(di.items())  # 获取字典内所有元素的键值对,且将他们转变为列表类型
print(lis)
print(type(lis))
​
# 对于获取的键或者值都可以用for循环遍历
for k in di.keys():  # 提取字典里的键,并且使用for循环遍历打印出来
    print(k)
​
​
for v in di.values():  # 提取字典里的值且遍历打印
    print(v)
​
for k, v in di.items():  # 使用两个循环变量,分别接收键值对的键和值,且进行遍历
    print(f'键为:{k},值为:{v}')

集合

"""
集合 set
    特性:对于在集合内重复的值,集合会自动去重,只留下不相同的值
    集合的创建:由花括号{}包裹,值与值之间逗号隔开
    {值1, 值2}
"""
st = {}  # 空字典的创建
print(type(st))
st1 = set()  # 空集合创建
print(type(st1))
​
# 创建一个列表,将列表类型转变为集合类型
li = [1, 3, 2, 5, 6, 7, 7, 2, 2, 2, 7]
n_st = set(li)
print(n_st)  # 集合特性:去重 教育微小一些的数值类型会进行默认排序
​
​
# 集合是散列类型之一,所以里面的数据无序
st2 = {'孑然', 2132, '同学1', '同学2', 334, 123, 6666, 213}
print(st2)  # 每一次运行,集合里数据的顺序都会改变,即为无序
​

集合的运算

"""
集合的运算
    & 两个集合里面相同的元素 -> 交集
    | 两个集合内所有的元素合并在一起 -> 并集
    - a - b -> 集合a中与集合b相同的元素被减去,剩下集合a有集合b没有的数据(留下a有b没有的数据)-> 差集
"""
set1 = {1, 2, 3}
set2 = {1, 2, "a"}
# 交集
print(set1 & set2)  # 输出为两个集合中相同的元素
​
# 并集
print(set1 | set2)  # 输出为两个集合中所有的元素
​
# 差集
print(set1 - set2)  # 输出前面集合有,后面集合没有的元素
​
"""
集合的增删改查
add()    增加一个元素
update() 增加多个元素
pop()    随机删除 - 字典中学习过
remove   删除指定元素 - 字符串中学习过
"""
# add() 在存在的集合内添加一个元素
s1 = {1, 2, 3, 4}
s1.add('同学x')
print(s1)
​
​
# update({值1, 值2, 值n}) 添加多个元素
s1.update({'同学1', '同学2', '同学n'})
print(s1)
​
# pop() 在集合中为:随机删除一个元素(因为集合中数据无序的原因)
s1.pop()
print(s1)
​
# remove(元素名) 删除指定元素
s1.remove('同学x')
print(s1)

以上就是今天补充课程的一个内容,学到这里,就已经是把咱们python基础入门的知识学习完毕了,在下一节课是咱们的阶段总结,到时候会将入门所有的内容规律的整合在一起,同时也是带大家进行知识的复习,