数据结构-字符串

字符串

什么是字符串?

字符串是在任何编程语言中都非常重要的一种数据类型。

在 Python 中,字符串是由引号包裹的任意字符组成的不可变序列,用于表示文本类型数据。

字符串定义

字符串可以通过使用 单引号 或 双引号 或 三引号 来定义,用于表示文本信息,如姓名、消息等。

# 使用单引号定义字符串:
name = 'Alice'
# 使用双引号定义字符串:
message = "Hello, world!"
# 使用三引号定义字符串
sql_string = """select * from user where name='tom';"""

转义字符

转义字符在字符串中用于表示一些特殊字符或序列,以及插入难以直接输入的字符。

常见的转义字符包括:\n 表示换行符,\t 表示制表符,\" 表示双引号,\' 表示单引号,\\ 表示反斜杠。

通过使用转义字符,可以在字符串中插入特殊字符或表示这些无法直接输入的内容。

message = "Hello\nWorld!"
print(message)# output:
# Hello
# World!

字符串下标

下标是指从 0 开始的数字编号,也称为索引。

在字符串中,每一个字符都会对应一个下标,通过下标可以获取字符串中该下标对应的字符

语法格式:字符串对象[下标]

s = "hello"
print(s[0])
print(s[3])
print(s[5]) # 该行代码会报错

注意: 下标在使用时,不能大于等于该字符串所有字符的个数,否则会产生下标越界错误。

练习:

编写一个Python程序,输入一个5位数,判断输入的这个数字是否为回文数。回文数是指从左到右和从右到左读都一样的数。例如12321。如果输入的是回文数,输出是回文数,否则输出不是回文数。

实现方式:

def is_palindrome():num = input("请输入一个5位数:")        # 通过 input 函数获取用户输入的字符串,并将其赋值给变量 numif num == num[::-1]:                # 使用切片 [::-1] 反转字符串,然后将反转后的字符串与原始字符串进行比较。如果它们相等,说明这个数是回文数print(f"{num} 是一个回文数!")else:print(f"{num}不是一个回文数!")is_palindrome()

字符串操作

字符串是在每一门编程语言中都非常重要的数据类型,同时对于字符串也提供了丰富的操作函数。

下面将 Python 中提供的字符串常用函数进行分类讲解

注意

所有的字符串操作,都不会影响原字符串本身,每次操作后都会得到一个操作后的新字符串对象

统计查找替换类

  • len() 用来获取参数字符串的字符个数,该函数并不是字符串类型特有的,而是一个通用函数

    格式: len(obj)

      length = len("Hello")print(length)length = len("Hello World")print(length)
    
  • count() 返回 str 在 string 里面出现的次数,如果 start 或者 end 指定则返回指定范围内 str 出现的次数

    格式: count(str, start, end)

    s = "hello world hello Python"
    n = s.count("o")
    print(n)
    n = s.count("O")
    print(n)
    n = s.count("or")
    print(n)
    n = s.count("o",10,30)
    print(n)
    
  • index() 检测 sub 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则抛出一个异常

    格式: index(sub, start, end)

    s = "Hello"
    print(s.index("l"))
    print(s.index("l",0,3)) # 区间使用下标位置,左闭右开区间
    print(s.index("k"))
    
  • rindex() 作用同 index(),查找子串时从右侧查找,若找不到会抛出一个异常

    格式: rindex(sub, start, end)

    s = "Hello"
    print(s.rindex("l"))
    print(s.rindex("l",0,3))
    print(s.rindex("k"))
    
  • find() 检测 sub 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1

    格式: find(sub, start, end)

    s = "Hello"
    print(s.find("l"))
    print(s.find("l",0,3))
    print(s.find("k"))
    
  • rfind() 作用同 find(),查找子串时从右侧查找,若找不到返回 -1

    格式: rfind(sub, start, end)

    s = "Hello"
    print(s.rfind("l"))
    print(s.rfind("l",0,3))
    print(s.rfind("k"))
    
  • replace() 把 string 中的 old 替换成 new,如果 max 指定,则替换不超过 max 次.

    格式: replace(old, new, max)

    s = "Hello Hello Hello"
    print(s.replace("ll","LL"))
    print(s.replace("l","L",4))
    

字符串判断类

  • startswith() 检查字符串是否是以 prefix 开头,是则返回 True,否则返回 False。如果 start 和 end 指定值,则在指定范围内检查.

    格式: startswith(prefix, start, end)

    url = "https://www.ceshiren.com"
    print(url.startswith("https://"))
    print(url.startswith("https://", 0, 3))
    print(url.startswith("https://", 5, 30))
    
  • endswith() 检查字符串是否是以 suffix 结束,是则返回 True,否则返回 False。如果 start 和 end 指定值,则在指定范围内检查.

    格式: endswith(suffix, start, end)

    url = "https://www.ceshiren.com"
    print(url.endswith(".com"))
    print(url.endswith(".com", 0, 20))
    print(url.endswith(".com", 5, 30))
    
  • isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False

    格式: isalpha()

    print("abc".isalpha())
    print("ABC".isalpha())
    print("ABCabc".isalpha())
    print("123".isalpha())
    print("a b".isalpha())
    print("abc123".isalpha())
    print("123abc".isalpha())
    print("a@".isalpha())
    print("".isalpha())
    
  • isdigit() 如果 string 只包含数字则返回 True 否则返回 False.

    格式: isdigit()

    print("123".isdigit())
    print("123abc".isdigit())
    print("abc123".isdigit())
    print("".isdigit())
    
  • isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True ,否则返回 False

    格式: isalnum()

    print("abc".isalnum())
    print("ABC".isalnum())
    print("ABCabc".isalnum())
    print("123".isalnum())
    print("abc123".isalnum())
    print("123abc".isalnum())
    print("a b".isalnum())
    print("a@".isalnum())
    print("".isalnum())
    
  • isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.

    格式: isspace()

    print(" ".isspace())
    print("    ".isspace()) # tab键,由4个空白组成
    print("\t".isspace())
    print("\n".isspace())
    print("\r".isspace())
    print("".isspace())
    print(" a".isspace())
    print("1 ".isspace())
    
  • isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

    格式: isupper()

    print("ABC".isupper())
    print("ABC123".isupper())
    print("123ABC".isupper())
    print("A!@#B".isupper())
    print("abc".isupper())
    print("abC".isupper())
    print("abc123".isupper())
    print("Abc!@#".isupper())
    print("123".isupper())
    print("".isupper())
    print(" ".isupper())
    
  • islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

    格式: islower()

    print("abc".islower())
    print("abc123".islower())
    print("ABC".islower())
    print("abC".islower())
    print("Abc!@#".islower())
    print("123".islower())
    print("".islower())
    print(" ".islower())
    
  • istitle() 如果 string 是标题化的(所有单词首字符是大写)则返回 True,否则返回 False

    格式: istitle()

    print("Username".istitle())
    print("User Name".istitle())
    print("User_Name".istitle())
    print("User.Name".istitle())
    print("User+Name".istitle())
    print("username".istitle())
    print("UserName".istitle())
    print("user name".istitle())
    print("User name".istitle())
    

字符串转换类

  • capitalize() 把字符串的第一个字符大写

    格式: capitalize()

    print("username".capitalize())
    print("Username".capitalize())
    print("userNAME".capitalize())
    print("this is username".capitalize())
    
  • title() 返回标题化的 string,就是说所有单词都是以大写开始,其余字母均为小写

    格式: title()

    print("this is username".title())
    print("THIS IS USERNAME".title())
    print("tHIS IS username".title())
    
  • upper() 转换 string 中的小写字母为大写

    格式: upper()

    print("abc".upper())
    print("ABC".upper())
    print("abCd".upper())
    print("abc123".upper())
    print("abc123ABC".upper())
    
  • lower() 转换 string 中的小写字母为小写

    格式: lower()

    print("abc".lower())
    print("ABC".lower())
    print("abCd".lower())
    print("abc123".lower())
    print("abc123ABC".lower())
    

字符串对齐类

  • center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串,如果指定 fillchar 参数,则使用指定字符填充,fillchar 参数长度只能为 1

    格式: center(width, fillchar)

    print("|"+"hogworts".center(20) + "|")
    print("|"+"hogworts".center(5) + "|")
    print("|"+"hogworts".center(20, "-") + "|")
    
  • ljust() 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串,如果指定 fillchar 参数,则使用指定字符填充,fillchar 参数长度只能为 1

    格式: ljust(width, fillchar)

    print("|"+"hogworts".ljust(20) + "|")
    print("|"+"hogworts".ljust(5) + "|")
    print("|"+"hogworts".ljust(20, "-") + "|")
    
  • rjust() 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串,如果指定 fillchar 参数,则使用指定字符填充,fillchar 参数长度只能为 1

    格式: rjust(width, fillchar)

    print("|"+"hogworts".rjust(20) + "|")
    print("|"+"hogworts".rjust(5) + "|")
    print("|"+"hogworts".rjust(20, "-") + "|")
    

字符串去除空白类

  • strip() 删除 string 左右两侧的空白字符, 如果指定 chars 参数,则删除左右两侧指定的字符

    格式: strip(chars)

    print("|" + "  hogworts  " + "|")
    print("|" + "  hogworts  ".strip() + "|")
    print("|" + "  hogworts".strip() + "|")
    print("|" + "hogworts  ".strip() + "|")
    print("|" + "  h o g w o r t s  ".strip() + "|")
    print("|" + "bachogwortsabc".strip("cba") + "|")
    
  • lstrip() 删除 string 左边的空白字符, 如果指定 chars 参数,则删除左两侧指定的字符

    格式: lstrip(chars)

    print("|" + "  hogworts  " + "|")
    print("|" + "  hogworts  ".lstrip() + "|")
    print("|" + "  hogworts".lstrip() + "|")
    print("|" + "hogworts  ".lstrip() + "|")
    print("|" + "  h o g w o r t s  ".lstrip() + "|")
    print("|" + "bachogwortsabc".lstrip("cba") + "|")
    
  • rstrip() 删除 string 左边的空白字符, 如果指定 chars 参数,则删除右两侧指定的字符

    格式: rstrip(chars)

    print("|" + "  hogworts  " + "|")
    print("|" + "  hogworts  ".rstrip() + "|")
    print("|" + "  hogworts".rstrip() + "|")
    print("|" + "hogworts  ".rstrip() + "|")
    print("|" + "  h o g w o r t s  ".rstrip() + "|")
    print("|" + "bachogwortsabc".rstrip("cba") + "|")
    

字符串分割类

  • split() 以 sep 为分隔符分割 string ,如果指定 maxsplit 参数,则仅分割 maxsplit 次

    格式: split(sep, maxsplit)

    print("a-b-c-d".split("-"))
    print("a-b-c-d".split("-", 2))
    print("a--b-c-d".split("-"))
    print("a-+b-c-d".split("-+"))
    print("a b\tc\nd\re".split())
    print("a b c d e".split(" ", 3))
    
  • splitlines() 使用换行符\n分割 string,如果指定 keepends 参数,则结果中会保留\n符号

    格式: splitlines(keepends)

    print("a\nb\nc".splitlines())
    print("a\nb\nc".splitlines(True))
    
  • partition() 从 sep 出现的第一个位置起,把 string 分成一个 3 元素的元组 (string_pre_sep,sep,string_post_sep), 如果 string 中不包含 sep 则 string_pre_str == string,其余元素为空字符串

    格式: partition(sep)

    print("This is Hogworts".partition("is"))
    print("This is Hogworts".partition("iss"))
    
  • rpartition() 从右向左 sep 出现的第一个位置起,把 string 分成一个 3 元素的元组 (string_pre_sep,sep,string_post_sep),如果 string 中不包含 sep 则 string_post_str == string,其余元素为空字符串

    格式: rpartition(sep)

    print("This is Hogworts".rpartition("is"))
    print("This is Hogworts".rpartition("iss"))
    

字符串连接类

  • +号 将两个字符串连接生成一个新字符串, + 号两侧必须都是字符串

    格式: str1 + str2

    print("Hello" + "World")
    print("Hello" + "123")
    print("Hello" + 123)
    
  • *号 将字符串重复 N 次后生成一个新字符串

    格式: str * n

    print("*"* 10)
    print("hello"* 10)
    
  • join() 使用 string 连接可迭代对象中的所有元素,可迭代对象参数中的所有元素必须是字符串

    格式: join(iterable)

    print("".join(("a","b","c")))
    print("-".join(("a","b","c")))
    print("->".join(("a","b","c")))
    print("->".join(["a","b","c"]))
    print("->".join({"a","b","c"}))
    print("->".join({"a":"A","b":"B","c":"C"}))
    

编码解码类

  • encode() 使用 encoding 指定的字符集,对 string 进行编码,转换成二进制字符串

    格式: encode(encoding)

    print("abc123".encode("gbk"))
    print("你好".encode("gbk"))print("abc123".encode("utf-8"))
    print("你好".encode("u8"))
    
  • decode() 使用 encoding 指定的字符集,对 string 进行解码,转换成字符串对象, string 必须是二进制字符串

    格式: decode(encoding)

    s1 = b'\xc4\xe3\xba\xc3'
    s2 = b'\xe4\xbd\xa0\xe5\xa5\xbd'
    print(s1.decode("gbk"))
    print(s2.decode("utf-8"))# print(s1.decode("u8"))
    # print(s2.decode("gbk"))
    

切片操作

对字符串按指定的范围进行截取,得到一个子字符串,指定范围时,起始下标必须小于结束下标,且子字符串不包含结束下标

格式: str[start: end: step]

s = "abcdefg"# 普通切片
print(s[0: 2])
# 省略范围
print(s[0:])
print(s[: 2])
print(s[:])
# 指定步长
print(s[::1])
print(s[::2])
# 负下标
print(s[-3: -1])
# 负步长
print(s[-1: -3: -1])
# 逆序
print(s[::-1])

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

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

相关文章

【笔试记录】腾讯音乐 | 20230903 | cpp (更新ing)

1 完美数 1.1 题目描述 小红定义一个数为“完美数”&#xff0c;当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。 小红拿到了一个大小为 n&#xff08;2 < n < 2000&#xff09;的数组 a&#xff0c;她希望选择数组中的两个元素&#xff08;1 …

代码随想录算法训练营第75天:总结篇[1]

代码随想录算法训练营第75天&#xff1a;总结篇 代码随想录姑且是都过了一遍了&#xff0c;最开始了解到的时候还不会c语法&#xff0c;跟着学习还是有难度的&#xff0c;也很难坚持着去写题&#xff0c;后面决定加入训练营与大家齐头并进&#xff0c;刚开始气氛很好&#xff…

【CentOS 7 上安装 Oracle JDK 8u333】

文章目录 下载 Oracle JDK 8u333&#xff1a;上传 RPM 包到服务器安装 Oracle JDK设置 JAVA_HOME 环境变量验证 下载 Oracle JDK 8u333 访问 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 找到 JDK 8u333 版本&#xff0c;并下载适用于 L…

TTS文本转声音:fish-speech 推理、requests访问接口案例

参考: https://hub.docker.com/r/lengyue233/fish-speech https://speech.fish.audio/inference/#http-api 下载 下载模型: HF_ENDPOINT=https://hf-mirror.com huggingface-cli download fishaudio/fish-speech-1.2 --local-dir checkpoints/fish-speech-1.2下载的内容有…

maven项目、idea抽风问题解决

开发的时候遇到奇奇怪怪的非技术问题&#xff0c;解决起来会费时间&#xff0c;做无用功。   这里记录常见的情况和解决方法 1.未识别maven项目 文件的图标变成了这种橙色的&#xff0c;而且有主启动函数也不能run 右键pom文件&#xff0c;点击Add as Maven Project 如果…

【在大模型RAG系统中应用知识图谱】

【引子】 关于大模型及其应用方面的文章层出不穷&#xff0c;聚焦于自己面对的问题&#xff0c;有针对性的阅读会有很多的启发&#xff0c;本文源自Whyhow.ai 上的一些文字和示例。对于在大模型应用过程中如何使用知识图谱比较有参考价值&#xff0c;特汇总分享给大家。 在基于…

c语言的字符串拷贝函数strcpy()的行为

/*** 字符串函数* 符串复制函数* strcpy()和strncpy()* 覆盖行为** strcpy()简单易用&#xff0c;但需要程序员确保目标缓冲区足够大&#xff0c;以避免缓冲区溢出。* strncpy()提供了限制复制字符数的能力&#xff0c;增加了安全性&#xff0c;* 但使用时需注意目标字符串可能…

知识图谱构建助手安装配置使用!Sapphire Ventures最全Sales AI图谱:AI如何重塑销售行业?

知识图谱构建助手安装配置使用!Sapphire Ventures最全Sales AI图谱:AI如何重塑销售行业? 项目简介 llmgraph 使您能够从给定的源实体维基百科页面创建 GraphML、GEXF 和 HTML 格式(通过 pyvis 生成)的知识图。知识图谱是通过从 ChatGPT 或 LiteLLM 支持的其他大型语言模型…

算法训练营第七十六天(最后一天、完结撒花) | Bellmanford之单源有限最短路、Floyd算法、A*算法

算法训练营最后一天 | Bellmanford之单源有限最短路、Floyd算法、A*算法 Bellmanford之单源有限最短路 题目连接&#xff1a; https://kamacoder.com/problempage.php?pid1154 在之前的基础上松弛k1次而不是n1次即可 #include <iostream> #include <vector> #…

14-8 小型语言模型的兴起

过去几年&#xff0c;我们看到人工智能能力呈爆炸式增长&#xff0c;其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数&#xff0c;已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而&#xff0c;虽然 LLM 的能力令人印象深刻…

AIOps与生成式人工智能的结合

AIOps&#xff08;智能化运维&#xff09;与生成式人工智能&#xff08;如ChatGPT等GenAI模型&#xff09;的结合是近期运维领域的一个重要热点。这种结合不仅提升了运维的智能化水平&#xff0c;还拓宽了AIOps的应用范围&#xff0c;为企业带来了诸多好处。以下是对AIOps与生成…

新能源行业知识体系-------2024内蒙古电力多边交易市场中长期交易相关事宜通知(讨论稿)

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/139946830 目录 0、读了这个文件我们该怎么去做一、为什么有这个文件二、交易规模三、市场主体四、“保量保价”优先发电计划安排五、区内电力交…

算法解题之双指针

简介 双指针技术是一种常见的算法设计思路,它通常适用于处理有序数组或链表等数据结构。双指针算法通过使用两个指针,同时从不同的方向遍历数组或链表,来解决一些特定的问题。 背景 双指针解题思路的产生背景主要有以下几个方面: 数据结构的特点 许多需要解决的算法问题都…

SonarWiz 8.0.1侧扫 浅剖 测深软件License获取

SonarWiz 8.0.1是功能强大的测绘软件&#xff01;提供强大的数据采集、后处理等功能操作&#xff0c;您将获得灵活完整的报告&#xff0c;并提供丰富的选项以便进行定制和更灵活的进行操作&#xff0c;软件功能齐全&#xff0c;包括完整的海底测绘解决方案&#xff0c;方便实时…

国产麒麟v10、UOS系统在线比较两个Word文件的内容差异

调用PageOffice的WordCompare方法&#xff0c;同时在线打开两个Word文档&#xff0c;可以切换显示其中的一个文档&#xff0c;或者显示两个文档的对比结果&#xff0c;即可实现在线的文档内容比较功能。此功能可以应用在以下方面&#xff1a; 文档管理中&#xff0c;比较两个版…

前端八股文 说一说样式优先级的规则是什么?

标准的回答 CSS样式的优先级应该分成四大类 第一类 !important&#xff1a; &#x1f604;无论引入方式是什么&#xff0c;选择器是什么&#xff0c;它的优先级都是最高的。 第二类 引入方式&#xff1a; &#x1f604;行内样式的优先级要高于嵌入和外链&#xff0c;嵌入和外链…

C++11|左、右值引用和移动语义

目录 一、左值引用 && 右值引用 1.1什么是左值&#xff1f;什么是左值引用&#xff1f; 1.2什么是右值&#xff1f;什么是右值引用&#xff1f; 1.3左值引用与右值引用比较 二、左、右值引用使用场景(为什么要有右值引用?) 2.1左值引用使用场景&#xff1a; 2.2右…

秋招突击——设计模式补充——简单工厂模式和策略模式

文章目录 引言正文简单工厂模式策略模式策略模式和工厂模式的结合策略模式解析 总结 引言 一个一个来吧&#xff0c;面试腾讯的时候&#xff0c;问了我单例模式相关的东西&#xff0c;自己这方面的东西&#xff0c;还没有看过。这里需要需要补充一下。但是设计模式有很多&…

数字IC设计-VCS和Verdi的使用

#学习记录# 前言&#xff1a;本文以一个简单的计数器来说明vcs和verdi的使用 1 代码文件 1.1 计数器代码 //Engineer&#xff1a;Mr-pn-junction module counter(input clk,input rst,output reg [5:0] count); always(posedge clk or negedge rst)beginif(!rst)coun…

【算法】(C语言):二分查找

二分查找&#xff1a; 获取查找区域的中间位置。若中间位置的数据就是要找的值&#xff0c;则返回true。若要找的值 小于 中间位置的数据&#xff0c;则往左边查找。若要找的值 大于 中间位置的数据&#xff0c;则往右边查找。重复1和2&#xff0c;若没有要找的值&#xff0c;…