零基础学习Python(七)

1. 字符串常用方法

lower()、upper():转换为小写字符串、大写字符串

split(str):按照指定字符串str进行分割,结果为列表:

python 复制代码
email = "123@qq.com"
print(email.split("@"))
python 复制代码
['123', 'qq.com']

count(str):统计str字符串出现的次数:

python 复制代码
s = "hello"
print(s.count("o"))
python 复制代码
1

find(str):查找str字符串首次出现的位置,如果没有,则为-1:

python 复制代码
s = "hello"
print(s.find("l"))
print(s.find("p"))
python 复制代码
2
-1

index(str):与find类似,区别在于如果字符串没有找到,则报错

startswith(str)、endswith(str):是否以str开头、是否以str结尾

replace(old, new):使用new字符串替换所有的old字符串:

python 复制代码
print("hello".replace("o", "p"))
python 复制代码
hellp

center(width, fillchar):在指定的宽度范围内居中,并可以使用fillchar进行填充:

python 复制代码
print("HelloWorld".center(20))
python 复制代码
print("HelloWorld".center(20, "*"))

join(iter):将可迭代对象iter每个元素通过该字符串相连:

python 复制代码
print(".".join("hello"))
python 复制代码
h.e.l.l.o

strip(chars):去掉左侧和右侧的chars中包含的字符,chars不穿则默认去除空格:

python 复制代码
print("    Hello  World    ".strip())
python 复制代码
Hello  World
python 复制代码
print("ld-HelloWorld".strip("dl"))
python 复制代码
-HelloWor

lstrip(chars)、rstrip(chars):去掉左侧的chars中包含的字符、去掉右侧的chars中包含的字符

2. 格式化字符串的三种方式

占位符方式:

python 复制代码
name = "马冬梅"
age = 18
score = 98.5
print('姓名:%s,年龄:%d,分数:%.1f' % (name, age, score))
python 复制代码
姓名:马冬梅,年龄:18,分数:98.5

f-string方式(Python 3.6之后的方式):

python 复制代码
print(f'姓名:{name}, 年龄: {age}, 分数: {score}')
python 复制代码
姓名:马冬梅,年龄:18,分数:98.5

format方式:

python 复制代码
print('姓名:{0}, 年龄: {1}, 分数: {2}'.format(name, age, score))
python 复制代码
姓名:马冬梅,年龄:18,分数:98.5

format方式中的大括号中的0/1/2是format参数对应的索引位置,实际上也可以这样写:

python 复制代码
print('姓名:{2}, 年龄: {0}, 分数: {1}'.format(age, score, name))

3. 字符串的编码与解码

字符串的编码与解码本质上是字符串与字节类型的转换。编码使用encode方法(默认编码方式是utf-8),解码使用decode方法:

python 复制代码
s = "伟大的中国梦"
code = s.encode("utf-8")
print(code)
print(code.decode("utf-8"))

4. 字符串的验证

isdigit():所有字符是否都是数字,必须为阿拉伯数字

isnumeric(): 所有字符是否都是数字,可以为阿拉伯数字、罗马数字、中文数字

isalpha():所有字符是否都是字母,包括中文字符

islower():所有字符是否都是小写

isupper():所有字符是否都是大写

istitle():是否单词是否首字母大写

python 复制代码
print("一二三".isnumeric())
print("壹贰叁".isnumeric())
print("中文和English".isalpha())
print("Hello World".istitle())
print("Hello world".istitle())
python 复制代码
True
True
True
True
False

5. 正则表达式

re.match函数从字符串的起始位置开始匹配,如果匹配成功,结果为Match对象,否则为None

python 复制代码
import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.match(pattern, '3.11'))
print(re.match(pattern, 'd3.11'))
python 复制代码
<re.Match object; span=(0, 4), match='3.11'>
None

继续查看match对象的详细属性:

python 复制代码
m = re.match(pattern, '3.11')
print("匹配的起始位置", m.start())
print("匹配的结束位置", m.end())
print("匹配的区间", m.span())
print("匹配的数据", m.group())
python 复制代码
匹配的起始位置 0
匹配的结束位置 4
匹配的区间 (0, 4)
匹配的数据 3.11

re.search函数搜索整个字符串匹配,只匹配第一个,如果匹配成功,结果为Match对象,否则为None

python 复制代码
import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.search(pattern, 'def3.11 & 2.7'))
python 复制代码
<re.Match object; span=(3, 7), match='3.11'>

re.findall函数搜索整个字符串匹配,匹配所有,返回一个列表,如果没匹配,就是一个空列表(不是None)

python 复制代码
print(re.findall(pattern, 'def3.11 & 2.7'))
python 复制代码
['3.11', '2.7']

re.sub函数用于实现字符串中指定子串的替换

python 复制代码
import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.sub(pattern, '*', 'def3.11 & 2.7'))
python 复制代码
def* & *

re.split函数用于按照指定字符串来分割原始字符串

python 复制代码
import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.split(pattern, 'def3.11 & 2.7'))
python 复制代码
['def', ' & ', '']

6. 习题

1个英文字符是1个字符,1个中文字符也是1个字符,只不过1个英文字符是1个字节,utf-8编码下,1个中文字符是3个字节,gbk编码下,1个中文字符是2个字节。

7. 内置函数

divmod:获取商和余数

python 复制代码
x, y = divmod(13, 5)
print(x, y)
python 复制代码
2 3

sorted:对可迭代对象进行排序,返回一个新的对象,不改变原对象中的元素顺序:

python 复制代码
l = [3, 1, 44, 23]
print(sorted(l))
python 复制代码
[1, 3, 23, 44]

reversed:反转序列

python 复制代码
l = [3, 1, 44, 23]
print(list(reversed(l)))
python 复制代码
[23, 44, 1, 3]

all:判断迭代器中所有元素的布尔值是否都为True

python 复制代码
l1 = [3, 1, 44, 23, {}]
l2 = [3, 1, 44, 23, {2}]
print(all(l1))
print(all(l2))
python 复制代码
False
True

any:判断迭代器中是否有元素的布尔值为True

python 复制代码
l1 = [3, 1, 44, 23, {}]
l2 = [{}, (), False]
print(any(l1))
print(any(l2))
python 复制代码
True
False

filter:通过指定条件过滤迭代器元素

python 复制代码
l = [1, 2, 3, 4]
print(list(filter(lambda x: x % 2 == 0, l)))
python 复制代码
[2, 4]

map:通过指定函数映射迭代器元素

python 复制代码
l = [1, 2, 3, 4]
print(list(map(lambda x: x * 2, l)))
python 复制代码
[2, 4, 6, 8]

8. 类和对象的特殊属性和方法

python 复制代码
class A:
    pass


class B:
    pass


class C(A, B):
    def __init__(self, name, age):
        self.name = name
        self.age = age

a = A()
b = B()
c = C("zhangsan", 20)

print("a的属性字典", a.__dict__)
print("b的属性字典", b.__dict__)
print("c的属性字典", c.__dict__)
python 复制代码
a的属性字典 {}
b的属性字典 {}
c的属性字典 {'name': 'zhangsan', 'age': 20}
python 复制代码
print("a所属的类", a.__class__)
print("b所属的类", b.__class__)
print("c所属的类", c.__class__)
python 复制代码
a所属的类 <class '__main__.A'>
b所属的类 <class '__main__.B'>
c所属的类 <class '__main__.C'>
python 复制代码
print("A的父类元祖", A.__bases__)
print("B的父类元祖", B.__bases__)
print("C的父类元祖", C.__bases__)
print("A的父类", A.__base__)
print("B的父类", B.__base__)
print("C的父类", C.__base__)
python 复制代码
A的父类元祖 (<class 'object'>,)
B的父类元祖 (<class 'object'>,)
C的父类元祖 (<class '__main__.A'>, <class '__main__.B'>)
A的父类 <class 'object'>
B的父类 <class 'object'>
C的父类 <class '__main__.A'>
python 复制代码
print("A类的层次结构", A.__mro__)
print("B类的层次结构", B.__mro__)
print("C类的层次结构", C.__mro__)
python 复制代码
A类的层次结构 (<class '__main__.A'>, <class 'object'>)
B类的层次结构 (<class '__main__.B'>, <class 'object'>)
C类的层次结构 (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
python 复制代码
print("A类的子类", A.__subclasses__())
print("B类的子类", B.__subclasses__())
print("C类的子类", C.__subclasses__())
python 复制代码
A类的子类 [<class '__main__.C'>]
B类的子类 [<class '__main__.C'>]
C类的子类 []

注意,subclasses()是一个方法,不是属性

9. 对象的浅拷贝与深拷贝

浅拷贝:拷贝出来的对象的属性与原对象是一个地址空间的

深拷贝:拷贝出来的对象的属性与原对象不是一个地址空间的

python 复制代码
b = B()
bcopy = copy.copy(b)  #浅拷贝
bdeepcopy = copy.deepcopy(b)   #深拷贝

10. random模块的简单使用

seed函数时生成随机数种子,如果不传参,则默认取当前系统时间,如果随机数种子相同,那么生成的随机数也相同。

python 复制代码
random.seed(10)
print(random.random())
print(random.randint(1, 10))

多次执行random.random和random.randint函数,发现结果一样:

python 复制代码
0.5714025946899135
7

randrange用于产生m与n之间的步长为k的随机数:

python 复制代码
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
python 复制代码
7
7
7
4
7
1

choice函数用于从序列中随机选取一个数:

python 复制代码
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
python 复制代码
7
4
2
3
7

shuffle函数用于随机打乱序列的顺序:

python 复制代码
li = [1, 2, 3, 4, 5, 6]
random.shuffle(li)
print(li)
python 复制代码
[5, 6, 1, 2, 4, 3]
相关推荐
theoxiong5 分钟前
Python的Scapy库详解
开发语言·python·网络协议·tcp/ip·http·信息与通信·scapy
hsg7725 分钟前
ArcGIS Pro 克隆clone python环境报错问题处理方法
开发语言·python·arcgis
Flying_Fish_roe37 分钟前
Reactive 编程-Vert.x
开发语言·python
四代机您发多少39 分钟前
入门pytorch
人工智能·pytorch·python
dephixf1 小时前
WPF实现Hammer 3D入门学习
学习·c#·wpf
Rin__________1 小时前
Python计算机视觉 第8章-图像内容分类
python·计算机视觉·分类
西猫雷婶1 小时前
python画图|3D直方图基础教程
开发语言·python
守望↪星空1 小时前
画图方法总结
python
Sebastian Wang1 小时前
【学习归纳自我总结版】尚硅谷学习第一天
java·学习
码农超哥同学2 小时前
Python知识点:如何使用Python进行Excel文件操作(OpenPyXL、Pandas)
python·面试·excel·pandas·编程