学习python的第七天之数据类型——str字符串

学习python的第七天之数据类型——str字符串

Python 中的字符串(String)是最常用的数据类型之一,用于存储和表示文本信息。Python 中的字符串是不可变的,这意味着一旦创建了一个字符串,就不能修改它(但可以创建一个新的字符串作为旧字符串的修改版)。字符串在 Python 中是非常灵活的,可以使用单引号(‘)或双引号(")来定义,甚至可以使用三引号(’‘’ 或 “”")来定义多行字符串。

字符串的创建

# 使用单引号
str1 = 'Hello World!'# 使用双引号
str2 = "Python is fun!"# 使用三引号定义多行字符串
str3 = """This is a
multi-line string."""

字符串的连接

可以使用加号(+)来连接两个或多个字符串

str1 = 'Hello'
str2 = 'World'
greeting = str1 + ' ' + str2
print(greeting) #--> 'Hello World'

字符串的格式化

Python 提供了多种方式来格式化字符串,其中一些常用方法包括

# 方式一
# 使用 % 操作符(旧式):
name = 'Alice'
age = 30
info = 'My name is %s and I am %d years old.' % (name, age)
print(info) #--> My name is Alice and I am 30 years old.# 方式二
# 使用 str.format() 方法:
name = 'Bob'
age = 25info_1 = 'My name is {} and I am {} years old.'.format(name, age)
print(info_1) #--> My name is Bob and I am 25 years old.info_2 = 'My name is {NAME} and I am {AGE} years old.'.format(AGE=age, NAME=name) # 打乱顺序后的匹配方式
print(info_2) #--> My name is Bob and I am 25 years old.info_3 = 'My name is {1} and I am {0} years old.'.format(age, name) # 打乱顺序后的匹配方式
print(info_3) #--> My name is Bob and I am 25 years old.info_4 = 'My name is {} and I am {:.2f} years old.'.format(name, age) # 控制小数点位数
print(info_4) #--> My name is Bob and I am 25.00 years old.# 方式三
# 使用 f-strings(Python 3.6+):
name = 'Charlie'
age = 35
info = f'My name is {name} and I am {age} years old.'
print(info) #--> My name is Charlie and I am 35 years old.

字符串的索引和切片

字符串中的每个字符都有一个索引,从 0 开始。可以使用索引来访问字符串中的特定字符,或者使用切片来获取子字符串。

str = 'Hello World!'
print(str)  #--> 输出 'Hello World!'
print(str[6:])  #--> World!
print(str[:5])  #--> Hello
print(str[1:8])  #--> ello Wo
print(str[-1])  #--> !(负索引表示从字符串末尾开始计数)

字符串的索引可以通过设置步长(step)和方向来从字符串中提取特定的字符序列。字符串索引的基本形式是 string[start:stop:step],其中:

  • start 是起始索引(包含),
  • stop 是结束索引(不包含),
  • step 是步长,用于指定选取字符的间隔。

步长(Step)

  • step 为正数时,索引方向从左到右。
  • step 为负数时,索引方向从右到左。
# 从左到右,步长为正数:
text = "Python Programming"
# 提取从索引 0 到索引 15 的字符,每隔 2 个字符取一个
result = text[0:16:2]
print(result) #--> Pto rgam# 从右到左,步长为负数:
text = "Python Programming"
# 从字符串末尾开始,每隔 2 个字符取一个,直到索引 0(不包含)
# 注意:此时 start 比 stop 大,因为是从右向左
result = text[-1:-16:-2]
print(result) #--> gimroPnh (注意这里是逆序的)
# 如果想要得到正序的结果,可以再将结果反转
print(result[::-1]) #--> hnPormig

特殊用法

  • 省略 start,表示从字符串开始位置。
  • 省略 stop,表示到字符串结束位置。
  • 步长不能省略,默认为 1。
text = "Python Programming"# 从头到尾,每隔 3 个字符取一个
result = text[::3]
print(result) #--> Ph oai# 从尾到头,每隔 3 个字符取一个
result = text[::-3]
print(result) #--> gmrrnt (逆序)# 从头部第3个字符开始向后,每隔 3 个字符取一个
result = text[2::3]
print(result) #--> tnrrmg# 从尾部第2个字符开始向前,每隔 3 个字符取一个
result = text[-2::-3]
print(result) #--> nmgPoy

报错:

  • 索引值必须在字符串的有效范围内,否则会引发 IndexError
  • 步长不能为零,否则无法前进,会引发 ValueError

字符串的转义

字符串的转义通常指的是将字符串中的特殊字符或特定格式的文本转换为另一种格式,或者解释为程序能够理解和执行的代码。

在Python中,字符串的转义是指通过在字符串中的特定字符前添加反斜杠(\)来改变这些字符的通常含义,或者为了表示那些在正常情况下无法在字符串中直接包含的字符(如换行符、制表符等)。

  • \n:换行符,表示文本中的一行结束,开始新的一行。
  • \t:制表符,通常用于文本中对齐列或创建缩进。
  • \\:表示反斜杠字符本身,因为反斜杠是转义字符,所以要用两个反斜杠来表示一个。
  • \":表示双引号字符,允许在字符串中包含双引号。
  • \':表示单引号字符,允许在字符串中包含单引号(在单引号字符串中需要转义,但在双引号字符串中不需要)。
  • \r:回车符,通常与换行符一起使用来表示Windows风格的行结束符(\r\n)。
  • \b:退格符,将光标移动到前一个字符的位置。
  • \f:换页符,用于在文本中插入一个分页符。
  • \v:垂直制表符,类似于制表符,但用于垂直对齐。
  • \ooo:八进制数,其中ooo是一到三位八进制数字,表示相应的ASCII字符。
  • \xhh:十六进制数,其中hh是一位或两位十六进制数字,表示相应的ASCII字符。
  • \uhhhh:Unicode字符,其中hhhh是四位十六进制数字,表示一个Unicode字符。
  • \Uhhhhhhhh:Unicode字符,其中hhhhhhhh是八位十六进制数字,表示一个更广泛的Unicode字符(Python 3.3及更高版本)。
  • 原始字符串:在字符串前加上r前缀,可以创建原始字符串,这样字符串中的反斜杠就不会被当作转义字符。这对于表示文件路径、正则表达式等很有用。
# 使用转义字符创建字符串
string_with_escapes = "Hello\\\nworld!\t\"This is a test\x20!\""
print(string_with_escapes)

输出:
Hello
world! “This is a test !”
(其中test后的空格是由\x20表示的,十六进制20,对应的是十进制32,查找ASCII码表,对应的是空格)

# 使用原始字符串来避免转义
raw_string = r"Hello\\\nworld!\t\"This is a test\x20!\""
print(raw_string)

输出:
Hello\\nworld!\t"This is a test\x20!"

字符串大小写转换函数

  • str.upper():将字符串转换为大写。
  • str.lower():将字符串转换为小写。
  • str.title():每个单词的首字母大写。
  • str.capitalize():字符串的第一个单词的首字母大写。
s1 = 'Hello Python!'
s2 = 'hello world!'
print(s1.upper()) #--> HELLO PYTHON!
print(s1.lower()) #--> hello python!
print(s2.title()) #--> Hello World!
print(s2.capitalize()) #--> Hello world!

字符串去空格函数

  • str.strip():去除字符串左右两端的空白字符。
  • str.lstrip():去除字符串左边的空白字符。
  • str.rstrip():去除字符串右边的空白字符。
s = '  Hi world!  '
print(s.strip()) #--> Hi world!
print(s.lstrip()) #--> Hi world!  
print(s.rstrip()) #-->   Hi world!

字符串替换和拆分函数

  • str.replace(old, new, count):将字符串中的旧子字符串替换为新子字符串,默认有多少替换多少,count用于设定需要替换的个数。
  • str.split(separator, maxsplit):根据分隔符将字符串拆分为列表,默认切割所有,maxsplit用于设定最大切割次数。
s = r'C:\Users\Administrator\Downloads'
print(s.replace('\\', '/')) #--> C:/Users/Administrator/Downloads
print(s.replace('\\', '/', 2)) #--> C:/Users/Administrator\Downloads
print(s.split('\\')) #--> ['C:', 'Users', 'Administrator', 'Downloads']
print(s.split('\\', 2)) #--> ['C:', 'Users', 'Administrator\\Downloads']

字符串查找位置和长度函数

  • str.find(sub[, start[, end]]):查找子字符串在字符串中第一次出现的位置。
  • str.rfind(sub[, start[, end]]):查找子字符串在字符串中最后一次出现的位置。
  • str.index(sub[, start[, end]]):查找子字符串在字符串中第一次出现的位置。
  • str.rindex(sub[, start[, end]]):查找子字符串在字符串中最后一次出现的位置。
  • lenn(str):返回字符串的长度,整数型
s = r'C:\Users\Administrator\Downloads'
print(s.find('Users')) #--> 3
print(s.find('s')) #--> 4
print(s.rfind('s')) #--> 31
print(s.index('s')) #--> 4
print(s.rindex('s')) #--> 31
print(len(s)) # 32
  • find()rfind() 适用于不需要异常处理的查找场景,当未找到子字符串时返回-1。
  • index()rindex() 适用于需要确保子字符串存在的查找场景,当未找到子字符串时抛出异常。
  • find()index() 从左到右查找,rfind()rindex() 从右到左查找。
s = '  Hello World!  '
print(s.find('找不到')) #--> -1
print(s.rfind('找不到')) #--> -1
print(s.index('找不到')) #--> 报错 ValueError: substring not found
print(s.rindex('找不到')) #--> 报错 ValueError: substring not found

字符串判断相关的函数

  1. str.isupper():是否是全大写
  2. str.islower():是否是全小写
  3. str.isalpha():是否是纯字母组成
  4. str.isdigit():是否是纯数字组成
  5. str.isalnum():是否是字母或数字组成
  6. str.startswith(prefix, start, end):在字符串的startend区间,默认全字符串,判断开始字符是否是prefix
  7. str.endswith(prefix, start, end):在字符串的startend区间,默认全字符串,判断开始字符是否是end
s1 = 'HELLO'
s2 = 'Hello'
s3 = 'hello'
s4 = 'Hello 123'
s5 = 'hello123'
s6 = '123'print(s1.isupper(), s1.islower(), s1.isalpha(), s1.isdigit(), s1.isalnum(), s1.startswith('H'), s1.endswith('o'))
# True False True False True True Falseprint(s2.isupper(), s2.islower(), s2.isalpha(), s2.isdigit(), s2.isalnum(), s2.startswith('H'), s2.endswith('o'))
# False False True False True True Trueprint(s3.isupper(), s3.islower(), s3.isalpha(), s3.isdigit(), s3.isalnum(), s3.startswith('H'), s3.endswith('o'))
# False True True False True False Trueprint(s4.isupper(), s4.islower(), s4.isalpha(), s4.isdigit(), s4.isalnum(), s4.startswith('H'), s4.endswith('o'))
# False False False False False True Falseprint(s5.isupper(), s5.islower(), s5.isalpha(), s5.isdigit(), s5.isalnum(), s5.startswith('H'), s5.endswith('o'))
# False True False False True False Falseprint(s6.isupper(), s6.islower(), s6.isalpha(), s6.isdigit(), s6.isalnum(), s6.startswith('H'), s6.endswith('o'))
# False False False True True False False

字符串对齐相关函数

  1. str.center(width, fillchar):在width数量宽度的字符串中,将str居中对齐显示,两侧空白区域用fillchar填充,其中fillchar必须是单个字符,默认空格
  2. str.ljust(width, fillchar):在width数量宽度的字符串中,将str左对齐显示,两侧空白区域用fillchar填充,其中fillchar必须是单个字符,默认空格
  3. str.rjust(width, fillchar):在width数量宽度的字符串中,将str右对齐显示,两侧空白区域用fillchar填充,其中fillchar必须是单个字符,默认空格
s = '我爱中国!'print(s.center(25)) #           我爱中国!          
print(s.center(25, '+')) # ++++++++++我爱中国!++++++++++
print(s.center(24, '+')) # +++++++++我爱中国!++++++++++
print(s.ljust(25, '-')) # 我爱中国!--------------------
print(s.rjust(25, '*')) # ********************我爱中国!

字符串支持的符号

+str + str 字符串拼接,返回字符串

*str * num 字符串重复num遍拼接,返回字符串

==:判断两个字符串内容是相等的,返回布尔值

!=:判断两个字符串内容是不相等的,返回布尔值

%:字符串的格式化,字符串的占位

in:判断内容在字符串中,返回布尔值

not in:判断内容不在字符串中,返回布尔值

is:判断两个字符串地址是相等的,返回布尔值

is not:判断两个字符串地址不是相等的,返回布尔值

[]:字符串的下标或者切片,返回字符串

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

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

相关文章

【三维重建】Semantic Gaussians:开放词汇的3DGS场景理解

文章目录 摘要一、引言二、主要方法1.3D Gaussian Splatting2.其他方法2.1 Gaussian Grouping(ECCV 2024)2.2 GARField 3. 2D Versatile 投影4. 3D Semantic Network4. 推理 四、实验1. 实验设置2.定量结果 论文:https://arxiv.org/pdf/2403.…

华为OD机试真题-仿LISP计算

题目描述: LISP 语言唯一的语法就是括号要配对。 形如(OP P1 P2 …),括号内元素由单个空格分割。 其中第一个元素 OP 为操作符,后续元素均为其参数,参数个数取决于操作符类型。 注意: 参数 P1,P2 也有可能是另外一个嵌套的 (O…

centos7的maven配置

首先进入conf配置文件夹下的setting.xml 要改两个地方 第一&#xff1a;设置镜像源 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>c…

思考:linux Vi Vim 编辑器的简明原理,与快速用法之《 7 字真言 》@ “鱼爱返 说 温泉哦“ (**)

Linux vi/vim | 菜鸟教程 https://zhuanlan.zhihu.com/p/602675406 Linux Vim编辑器的基本使用_vim文本编辑器-CSDN博客 思考 1. 记忆公式&#xff1a; 按键操作的 7 字真言 1&#xff1a; "鱼爱返 说 温泉哦" v i Esc : wq ! ----------- 一般的简单…

Web服务nginx基本实验

安装软件&#xff1a; 启动服务&#xff1a; 查看Nginx服务器的网络连接信息&#xff0c;监听的端口&#xff1a; 查看默认目录&#xff1a; 用Windows访问服务端192.168.234.111的nginx服务&#xff1a;&#xff08;防火墙没有放行nginx服务&#xff0c;访问不了&#xff09; …

Ubuntu实现双击图标运行自己的应用软件

我们知道在Ubuntu上编写程序&#xff0c;最后编译得到的是一个可执行文件&#xff0c;大致如下 然后要运行的时候在终端里输入./hello即可 但是这样的话感觉很丑很不方便&#xff0c;下边描述一种可以类似Windows上那种双击运行的实现方式。 我们知道Ubuntu是有一些自带的程序…

【JAVA】正则表达式中的捕获组和非捕获组

在Java中&#xff0c;正则表达式中的捕获组&#xff08;Capturing Groups&#xff09;和非捕获组&#xff08;Non-Capturing Groups&#xff09;是用来对匹配的部分进行分组的技术。它们在处理复杂的匹配模式时非常有用。 捕获组 (Capturing Groups) 捕获组不仅将一部分正则表…

openresty入门教程:init_by_lua_block

init_by_lua_block 是 Nginx 配置中用于在 Nginx 启动时执行 Lua 脚本的一个指令。这个指令通常用于初始化全局变量、设置共享内存&#xff0c;或者执行一些需要在服务器启动时完成的准备工作。 以下是一个简单的 init_by_lua_block 使用示例&#xff1a; 1. 安装 Nginx 和 L…

Python小白学习教程从入门到入坑------第二十六课 单例模式(语法进阶)

在这个节课的开始&#xff0c;我们先回顾一下面向对象课程中学的构造函数__init__() 目录 一、__init__() 和 __new__() 1.1 __init__() 1.2 __new__() 二、单例模式 2.1 特点 2.2 通过classmethod实现单例模式 2.3 通过装饰器实现单例模式 2.3 通过重写__new__() 实现…

x-cmd pkg | onefetch - 轻松获取 Git 仓库统计信息,打造个性化输出!

目录 简介首次用户功能特点常见用法类似或相关的工具进一步阅读 简介 onefetch 是由 Ossama Hjaji 用 Rust 编写的命令行 Git 信息工具&#xff0c;可将本地 Git 存储库的项目信息和代码统计信息直接显示到您的终端。该工具完全离线 - 不需要网络访问。 首次用户 本文的 dem…

基于IM场景下的Wasm初探:提升Web应用性能|得物技术

一、何为Wasm &#xff1f; Wasm&#xff0c;全称 WebAssembly&#xff0c;官网描述是一种用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为一个可移植的目标&#xff0c;用于编译C/C/Rust等高级语言&#xff0c;支持在Web上部署客户端和服务器应用程序。 Wasm 的开发者参…

现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库

文章目录 一、概要二、整体架构流程1. 安装 MSYS2 环境2. 安装postgresql 三、技术名词解释1.MSYS22.postgresql 四、技术细节1. 创建主数据库2.添加从数据库复制权限3. 按需修改参数&#xff08;1&#xff09;WAL保留空间&#xff08;2&#xff09;监听地址 4. 启动主服务器5.…

《应用数学和力学》

作者须知 1.《应用数学和力学》(Applied Mathematics and Mechanics)于1980年由我国著名科学家钱伟长先生在重庆交通大学创办&#xff0c;创刊时为季刊&#xff0c;翌年增为双月刊&#xff0c;1985年起扩大为月刊。期刊主要刊登力学、力学中的数学方法和与现代力学紧密相关的应…

【CSS】标准怪异盒模型

概念 CSS 盒模型本质上是一个盒子&#xff0c;盒子包裹着HTML 元素&#xff0c;盒子由四个属性组成&#xff0c;从内到外分别是&#xff1a;content 内容、padding 内填充、border 边框、外边距 margin 盒模型的分类 W3C 盒子模型(标准盒模型) IE 盒子模型(怪异盒模型) 两种…

什么是PHP,有什么特点

PHP 简介 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;特别适合 Web 开发。PHP 代码可以直接嵌入到 HTML 中&#xff0c;也可以作为独立的脚本文件运行。PHP 的设计目标是使开发者能够快速编写动态和交互式的 Web 应用程序。P…

[前端项目Overview]表单构建器vue-form-generator

GitHub - vue-generators/vue-form-generator: :clipboard: A schema-based form generator component for Vue.js vue-generator-form 是一个基于 Vue.js 的表单生成器项目&#xff0c;用于动态地生成表单。它主要用于处理复杂的动态表单需求&#xff0c;比如根据 JSON 配置自…

Android中桌面小部件framework层使用到的设计模式

在Android中&#xff0c;桌面小部件&#xff08;App Widget&#xff09;的Framework层采用了多种设计模式&#xff0c;以实现模块化、可维护性和高效的交互。 以下是Android桌面小部件Framework层中常用的设计模式及其具体应用&#xff1a; 1. 观察者模式&#xff08;Observe…

半波正弦信号的FFT变换

目录 Hello&#xff0c; 大家好&#xff0c;这一期我们谈谈半波正弦信号的FFT变化长什么样子。本文硬件使用GFARM02硬件模块[1]&#xff0c;文章最后有其淘宝链接。核心器件为STM32F103RCT6&#xff0c;为Cortex-M3核&#xff0c;采用的CMSIS版本为CMSIS_5-5.6.0。 如图1所示&…

基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

nvm 切换 Node.js 版本

nvm 切换 Node.js 版本 0. nvm 安装1. 查看装了哪些 Node.js 版本2. 安装 Node.js 版本安装最新稳定版本.安装个18 3. 切换 Node.js 版本4. 设置默认 Node.js 版本5. 卸载 Node.js 版本6.与项目的配合使用参考资料 0. nvm 安装 安装教程就不写了&#xff0c;直接看别人的。 脚…