Python学习的第n天:字符串的深入

Python学习的第n天:字符串的深入

在这里插入图片描述

字符串

字符串的操作

​ 1. 对于字符串,我们可以对其做位置变换

# 定义字符串
a = 'hello, world'
# 居中
print(a.center(80, '='))
# 右对齐
print(a.rjust(80, '='))
# 左对齐
print(a.ljust(80, '='))

b = '123'
# 零填充(在左边补0)
print(b.zfill(6))

c = 1234
d = 3456
print('%d + %d = %d' % (c, d, c + d))
# Python 3.6引入的格式化字符串的便捷语法
print(f'{c} * {d} = {c * d:,}')
# 和上面的写法等价的语法
print('{} * {} = {:.2e}'.format(c, d, c * d))
print('{2} / {1} = {0:.2%}'.format(c / d, d, c))

在这里插入图片描述

  1. 对字符串前后多余的空格进行删减,替换字符串中的字符
email = '       2277078243@qq.com        '
content = '            无敌风火轮          '

# 修剪字符串左右两端的空格
print(email.strip())
print(content.strip())
# 修剪字符串左端的空格
print(email.lstrip())
# 修剪字符串右端的空格
print(email.rstrip())

# 将指定的字符串替换为新的内容
print(content.strip().replace('无敌', '*').replace('轮', '*'))

在这里插入图片描述

"""
example07 - 字符串的拆分和合并

split ---> 把字符串进行拆分,变成一个列表
join ---> 把列表元素进行合并,变成一个字符串

Author: 悾格
Date: 2021/7/29
"""

content = 'You go your way, I will go mine.'
content2 = content.replace(',', '').replace('.', '')
# 用空格拆分字符串得到一个列表
words = content2.split()
print(words, len(words))
for word in words:
    print(word)

# 用空格拆分字符串,最多允许拆分3次
words = content2.split(' ', maxsplit=3)
print(words, len(words))

# 从右向左进行字符串拆分,做多允许拆分3次
words = content2.rsplit(' ', maxsplit=3)
print(words, len(words))

# 用逗号拆分字符串
items = content.split(',')
for item in items:
    print(item)

contents = [
    '请不要相信我的美丽',
    '更不要相信我的爱情',
    '因为在涂满油彩的面孔下',
    '有着一颗戏子的心'
]
# 将列表中的元素用指定的字符串连接起来
print(' '.join(contents))

在这里插入图片描述

"""
example08 - 字符串的操作

str(字符串) ----> encode() ----> bytes(字节串)
bytes(字节串)----> decode() ----> str(字符串)


要点:
1. 选择字符集(编码)的时候,最佳的选择(也是默认的)是UTF-8编码。
2. 编码和解码的字符集要保持一致,否则就会出现乱码现象。
3. 不能用ISO-8859-1编码保存中文,否则会出现编码黑洞,中文变成?。
4. UTF-8是Unicode的一种实现方案,也一种变长的编码,
   最少1个字节(英文和数字),最多4个字节(Emoji),表示中文用3个字节。

Author: 悾格
Date: 2021/7/29
"""

# a = '我爱你中国'
# # GBK <--- GB2312 <---- ASCII
# b = a.encode('gbk')
# print(type(b))
# print(b, len(b))
# c = b'\xce\xd2\xb0\xae\xc4\xe3\xd6\xd0\xb9\xfa\xb0\xa1'
# print(c.decode('gbk'))

a = '我爱你中国亲爱的母亲'
# GBK <--- GB2312 <---- ASCII
# UTF-8编码是Unicode(万国码)的一种实现方案
b = a.encode('utf-8')
print(type(b))
print(b, len(b))
c = b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xb2\xe7\x88\xb1\xe7\x9a\x84\xe6\xaf\x8d\xe4\xba\xb2'
# 如果编码和解码的方式不一致,Python中可能会产生UnicodeDecodeError异常
# 也有可能会出现乱码现象
# 鎴戠埍浣犱腑鍥戒翰鐖辩殑姣嶄翰
print(c.decode('gbk'))
print(c.decode('utf-8'))

# a = '我爱你中国亲爱的母亲'
# # UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-9
# # latin-1编码不能够用来处理中文字符(因为会产生编码黑洞,中文全部变成?,想解码都没有机会)
# # b = a.encode('iso-8859-1')
# # print(b, len(b))

# # UTF-8是一种变长编码
# # 表示数字和英文字母的时候,只需要1个字节
# # 表示中文的时候,需要3个字节
# # 表示Emoji字符的时候,需要4个字节
# # 有些字符是占用2个字节
# a = '🧣🌂好'
# b = a.encode()
# print(b, len(b))
# print(b.decode())

在这里插入图片描述

"""
example09 - 字符串的操作

凯撒密码 - 通过对应字符的替换,实现对明文进行加密的一种方式。

abcdefghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyzabc

明文:attack at dawn.
密文:dwwdfn dw gdzq.

对称加密:加密和解密使用了相同的密钥 ---> AES。
非对称加密:加密和解密使用不同的密钥(公钥、私钥)---> RSA ---> 适合互联网应用。

Author: 悾格
Date: 2021/7/29
"""

message = 'attack at dawn.'
# 生成字符串转换的对照表
table = str.maketrans(
    'abcdefghijklmnopqrstuvwxyz',
    'defghijklmnopqrstuvwxyzabc'
)
# 通过字符串的translate方法实现字符串转译
print(message.translate(table))

在这里插入图片描述

集合

定义

把一定范围的、确定的、可以区别的事物当作一个整体来看待

集合应该满足以下特性:

  1. 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
  2. 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
  3. 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
set1 = {1, 1, 2, 3, 1, 1, 2}
# 互异性(没有重复元素)
print(type(set1), len(set1))
print(set1)

# 遍历集合中的元素
for elem in set1:
    print(elem)

# 无序性
# TypeError: 'set' object is not subscriptable
# print(set1[0])
set2 = set()
print(type(set2))
print(set2)

在这里插入图片描述

集合的运算
"""
example02 - 集合的运算

Author: 悾格
Date: 2021/7/29
"""

set1 = {1, 2, 3, 4, 5}
set2 = {2, 4, 6, 8}

# 成员运算 - 确定性(元素要么在集合中,要么不在集合中)
# 集合的成员运算在效率上是远远高于列表的成员运算
print(1 in set1)					# True
print(1 not in set1)				# False

# 交集
print(set1 & set2)					# {2, 4}
print(set1.intersection(set2))		# {2, 4}
# 并集
print(set1 | set2)					# {1, 2, 3, 4, 5, 6, 8}
print(set1.union(set2))				# {1, 2, 3, 4, 5, 6, 8}
# 差集
print(set1 - set2)					# {1, 3, 5}
print(set1.difference(set2))		# {1, 3, 5}
print(set2 - set1)					# {8, 6}
print(set2.difference(set1))		# {8, 6}
# 对称差
print(set1 ^ set2)					# {1, 3, 5, 6, 8}
print((set1 | set2) - (set1 & set2))# {1, 3, 5, 6, 8}
print(set1.symmetric_difference(set2))# {1, 3, 5, 6, 8}

set3 = {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 判断真子集
print(set1 < set3)					# True
print(set1.issubset(set3))			# True
# 判断子集
print(set1 <= set3)					# True
# 判断超集
print(set3 > set2)					# True
print(set3.issuperset(set2))		# True
集合的操作(方法)
"""
example03 - 集合的操作(方法)

集合底层使用的是哈希存储,通过计算元素的哈希码来决定元素存储的位置,这是一种高效率的存储方案。
哈希存储的关键是设计一个好的哈希函数,尽量保证不同的对象能够计算出不同的哈希码。
可变容器(列表、集合、字典)都无法计算哈希码,因此都不能放到集合中,作为集合的元素。

Author: 悾格
Date: 2021/7/29
"""

set1 = {'apple', 'banana', 'pitaya', 'apple'}

# 添加元素
set1.add('grape')
set1.add('durian')
print(set1)

# 删除元素
set1.discard('pitaya')
print(set1.pop())
print(set1.pop())
print(set1)

# 清空元素
set1.clear()
print(set1)

nums = [1, 1, 10, 10, 10, 5, 3, 9, 9]
set2 = set(nums)
print(set2)
list3 = list(set2)
print(list3)
tuple4 = tuple(list3)
print(tuple4)

set5 = set('hello')
print(set5)
# set2 = {True, False, True, True, False}
# print(set1)
# print(set2)
# set3 = {(1, 2, 3), (4, 5, 6)}
# print(set3)
# list4 = [set1, set2]
# print(list4)

在这里插入图片描述

总结

  1. 学习了字符串的定义与操作,粗略的了解字符串的函数用法
  2. 今天头有点痛,课上没怎么认真听,周末要将它补回来

加油,坚持

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值