零基础学习Python(七)

1. 字符串常用方法

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

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

email = "123@qq.com"
print(email.split("@"))
['123', 'qq.com']

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

s = "hello"
print(s.count("o"))
1

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

s = "hello"
print(s.find("l"))
print(s.find("p"))
2
-1

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

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

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

print("hello".replace("o", "p"))
hellp

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

print("HelloWorld".center(20))

print("HelloWorld".center(20, "*"))

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

print(".".join("hello"))
h.e.l.l.o

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

print("    Hello  World    ".strip())
Hello  World
print("ld-HelloWorld".strip("dl"))
-HelloWor

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

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

占位符方式:

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

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

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

format方式:

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

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

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

 3. 字符串的编码与解码

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

s = "伟大的中国梦"
code = s.encode("utf-8")
print(code)
print(code.decode("utf-8"))

4. 字符串的验证

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

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

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

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

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

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

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

 5. 正则表达式

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

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

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

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

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

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

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

print(re.findall(pattern, 'def3.11 & 2.7'))
['3.11', '2.7']

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

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

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

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

6. 习题

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

7. 内置函数

divmod:获取商和余数

x, y = divmod(13, 5)
print(x, y)
2 3

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

l = [3, 1, 44, 23]
print(sorted(l))
[1, 3, 23, 44]

reversed:反转序列

l = [3, 1, 44, 23]
print(list(reversed(l)))
[23, 44, 1, 3]

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

l1 = [3, 1, 44, 23, {}]
l2 = [3, 1, 44, 23, {2}]
print(all(l1))
print(all(l2))
False
True

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

l1 = [3, 1, 44, 23, {}]
l2 = [{}, (), False]
print(any(l1))
print(any(l2))
True
False

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

l = [1, 2, 3, 4]
print(list(filter(lambda x: x % 2 == 0, l)))
[2, 4]

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

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

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

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

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

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

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

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

b = B()
bcopy = copy.copy(b)  #浅拷贝
bdeepcopy = copy.deepcopy(b)   #深拷贝

 10. random模块的简单使用

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

random.seed(10)
print(random.random())
print(random.randint(1, 10))

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

0.5714025946899135
7

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

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))
7
7
7
4
7
1

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

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)))
7
4
2
3
7

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

li = [1, 2, 3, 4, 5, 6]
random.shuffle(li)
print(li)
[5, 6, 1, 2, 4, 3]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412513.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python12 中,No module named‘distutils‘错误

python12跑redis的时候&#xff0c;突然发现报错“ No module nameddistutils ” distutils在python标准库从2012年就开始断更了&#xff0c;python12中已经移除该库&#xff0c;可以安装以下库进行解决。 pip install setuptools --upgrade “setuptools”是一个处理Python软…

OceanBase 功能解析之 Binlog Service

前言 MySQL&#xff0c;是在全球广泛应用的开源关系型数据库&#xff0c;除了其稳定性、可靠性和易用性&#xff0c;他早期推出的二进制日志功能&#xff0c;即binlog&#xff0c;也是MySQL广受欢迎的原因。 MySQL binlog&#xff0c;即二进制日志&#xff0c;是 MySQL 中用于…

爆品是测出来的,不是选出来的

我在亚马逊摸爬滚打了五年&#xff0c;深深感受到了"七分选品&#xff0c;三分运营"的重要性。不管你的产品图片、描述多么精美&#xff0c;如果不去精选和测试&#xff0c;很难保证能出单。我见过很多跨境新手在选品上卡了几个月&#xff0c;纠结于卖什么。但实际上…

光敏电阻传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.光敏电阻传感器介绍 2.原理图 三、程序设计 main.c文件 ldr.h文件 ldr.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器&#xff0c;又称为光…

上新!Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型&#xff1b; 2.多图输出、多指标输出(MAE、RMSE、MSE、R2)&#xff0c;多输入单输出&#xff0c;含不同置信区间图、概率…

[000-01-015].第03节:SpringBoot中数据源的自动配置

我的后端学习大纲 SpringBoot学习大纲 1.数据访问流程&#xff1a; 2.搭建数据库开发场景&#xff1a; 2.1.导入JDBC场景&#xff1a; 2.2.分析自动导入的内容&#xff1a; 2.3.分析为何没有导入数据库驱动&#xff1a; 1.因为人家也不知道我要用啥数据库&#xff0c;所以在自…

衡石科技BI的API如何授权文档解析

授权说明​ 授权模式​ 使用凭证式&#xff08;client credentials&#xff09;授权模式。 授权模式流程说明​ 第一步&#xff0c;A 应用在命令行向 B 发出请求。 第二步&#xff0c;B 网站验证通过以后&#xff0c;直接返回令牌。 授权模式结构说明​ 接口说明​ 获取a…

如何禁止电脑访问网站

一、修改Hosts文件 找到Hosts文件&#xff1a;在Windows系统中&#xff0c;Hosts文件通常位于C:\Windows\System32\drivers\etc\目录下。 编辑Hosts文件&#xff1a;以管理员身份打开记事本或任意文本编辑器&#xff0c;然后找到并打开Hosts文件。 添加禁止访问的域名&#…

SSRF漏洞(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文主要讲解依靠phpstudy搭建pikachu靶场。 phpstudy下载使用以及搭建本地SQL labs靶场 SSRF漏洞&#xff08;一&#xff09; 靶场搭建。 靶场链接&#xff1…

Linux:NAT等相关问题

目录 1&#xff1a;NAT背景 2&#xff1a;NAT IP转换过程 3&#xff1a;NATP 4&#xff1a;正向代理 5&#xff1a;反向代理 6&#xff1a;NAT和代理服务器 应用场景 实现方法 1&#xff1a;NAT背景 IPv4地址耗尽&#xff1a;随着互联网的迅速发展&#xff0c;连接到…

LMDeploy 量化部署实践

一、环境配置见&#xff1a;https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/LMDeploy/readme.md 验证LMDeploy启动InternLM2_5-7b-chat conda activate lmdeploy lmdeploy chat /root/models/internlm2_5-7b-chat二、量化显存计算 参数计算&#xff1a; LMDeploy …

盘点15款工程软件,为制造业选型提供参考!

本文将盘点15款工程软件&#xff0c;供企业选型参考。 工程软件就如同工程领域的得力助手&#xff0c;能让工程建设的各个环节都变得更加高效、精准。 对于工程企业来说&#xff0c;如果没有合适的工程软件&#xff0c;就像工匠没有趁手的工具&#xff0c;难以打造出精良的作品…

linux查看系统安装时间命令,找出Linux操作系统(OS)安装日期和时间

你可能想知道你的计算机上何时安装了Linux操作系统,即OS的安装日期和时间,使用tune2fs、dumpe2fs、ls、basesystem、setup、setuptool命令能出来结果。请注意,如果你从模板安装了操作系统,那么它将显示模板生成日期,而不是实际操作系统安装日期。 方法1:如何使用tune2fs…

LayerNorm介绍

简介 Layer Normalization (LayerNorm) 是一种归一化技术&#xff0c;常用于深度学习模型中&#xff0c;特别是在 Transformer 模型中。 Layer normalization 是在特征维度上进行标准化的&#xff0c;而不是在数据批次维度上。 目的 收敛模型数据数值差异&#xff0c;缓解内…

GD32F4xx---RTC初始化设置及闹钟方式实现秒中断讲解

GD32F4xx—RTC初始化设置及闹钟方式实现秒中断讲解 1、下载链接:源码工程 一、概述 GD32F4x的RTC例程网上资源较少,详细阅读用户手册后做出如下配置。RTC模块提供了一个包含日期(年/月/日)和时间(时/分/秒/亚秒)的日历功能。除亚秒用二进制码显示外,时间和日期都以BC…

『功能项目』新输入系统【06】

我们打开上一篇04禁止射线穿透行为项目&#xff0c; 本章要做的事情是在Unity编辑器中添加 新输入系统 实现主角在场景中鼠标右键可以使主角 转向。 本次项目需要让Unity引擎重新启动所以先保存当前项目 再次打开项目后&#xff0c; 修改为Both 点击Apply前注意要先保存项目&a…

JVM上篇:内存与垃圾回收篇-07-方法区

笔记来源&#xff1a;尚硅谷 JVM 全套教程&#xff0c;百万播放&#xff0c;全网巅峰&#xff08;宋红康详解 java 虚拟机&#xff09; 文章目录 7. 方法区7.1. 栈、堆、方法区的交互关系7.2. 方法区的理解7.2.1. 方法区在哪里&#xff1f;7.2.2. 方法区的基本理解7.2.3. HotSp…

【Linux】命令简介------迅速掌握Linux命令

目录 Linux 命令 &#x1f354; ls命令 &#x1f354; cd 和 pwd命令 &#x1f354; 相对路径和绝对路径 &#x1f354; 文件/文件夹的创建以及文件内容的浏览 &#x1f354; 文件的复制,移动和删除 &#x1f354; 文件的查找 &#x1f354; grep 和管道 &#x1f354…

@antv/g6 业务场景:流程图

1、流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中&#xff0c;流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程&#xff0c;也可以是完成一项任务必需的管理过程。业务场景流程图如下&#xff1a; 2、绘制流程图的 Tips 流程图一般是用…

奇安信渗透测试岗位三面经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…