Python基础:字符串(String)详解

news2024/11/23 23:49:47

在这里插入图片描述

1. 字符串定义

  在Python中,字符串是一种数据类型,用于表示文本数据。字符串是由字符组成的序列,可以包含字母、数字、符号和空格等字符。在Python中,你可以使用单引号(')或双引号(")来定义字符串。
  1)使用单引号或双引号创建字符串

str1 = 'Hello, world!'
str2 = "Python Programming"

  2) 使用三引号创建多行字符串

multiline_str = '''This is a
multi-line
string.'''

2.访问字符串中的值

  Python不支持单字符类型,单字符在Python中也是作为一个字符串使用。
  Python中使用索引来访问字符串,可以使用方括号[](切片)来截取字符串。字符串是一个字符序列,每个字符都有与之关联的索引。
  字符串的截取的语法格式如下:

# 索引值以0为开始值,-1为从末尾的开始位置
变量[头下标:尾下标]

  示例:

# 创建一个字符串
my_string = "Hello, World!"

# 访问单个字符
first_char = my_string[0] #获取第一个字符,索引为0
second_char = my_string[1] # 获取第二个字符,索引为1

# 使用负数索引从末尾开始访问字符
last_char = my_string[-1]  # 获取最后一个字符
second_last_char = my_string[-2]  # 获取倒数第二个字符

# 切片(获取子串)
substring = my_string[7:12]  # 获取索引7到11的子串,不包括索引12

# 通过切片获取从开始到指定位置的子串
prefix = my_string[:5]  # 获取从开头到索引4的子串

# 通过切片获取从指定位置到末尾的子串
suffix = my_string[7:]  # 获取从索引7到末尾的子串

# 打印结果
print(first_char)         # 输出:H
print(last_char)          # 输出:!
print(substring)          # 输出:World
print(prefix)             # 输出:Hello
print(suffix)             # 输出:World!

在这里插入图片描述

3. 字符串更新

  在Python中,字符串是不可变(immutable)的,这意味着一旦创建,就不能直接修改字符串的内容,但可以通过创建一个新的字符串来实现修改的效果。

3.1 切片和拼接

# 尝试修改字符串中的某个字符(这会引发错误)
# my_string[0] = 'h'  # TypeError: 'str' object does not support item assignment

# 创建一个新字符串,实现修改的效果
new_string = 'h' + my_string[1:]
print(new_string)  # 输出:hello, World!
# 切片和拼接
my_string = "Python"
updated_string = my_string[:4] + "ic" + my_string[5:]
print(updated_string)  # 输出:Pythonic

3.2 使用str.join()方法

words = ["Hello", "World"]
result = " ".join(words)
print(result)  # 输出:Hello World

3.3 格式化字符串

name = "Alice"
age = 30
formatted_str = "My name is {} and I am {} years old.".format(name, age)
print(formatted_str)
# 输出:My name is Alice and I am 30 years old.

3.4 使用f-字符串(Python3.6版本以上)

name = "Bob"
age = 25
formatted_str = f"My name is {name} and I am {age} years old."
print(formatted_str)
# 输出:My name is Bob and I am 25 years old.

  这些方法中的每一个都会创建一个新的字符串,而不是在原始字符串上直接修改。在实际编程中,选择哪种方式取决于具体的项目需求。如果需要频繁修改字符串,可能需要考虑使用列表(list)或其他可变对象。

4. 转义字符

  在Python字符串中,转义字符用于表示一些特殊字符或执行特定的操作。转义字符以反斜杠\ 开始,后面跟着一个或多个字符。
在这里插入图片描述

print('\'Hello, world!\'')  # 输出:'Hello, world!'

print("Hello, world!\nHow are you?")  # 输出:Hello, world!
                                        #       How are you?

print("Hello, world!\tHow are you?")  # 输出:Hello, world!    How are you?

print("Hello,\b world!")  # 输出:Hello world!

print("Hello,\f world!")  # 输出:
                           # Hello,
                           #  world!

print("A 对应的 ASCII 值为:", ord('A'))  # 输出:A 对应的 ASCII 值为: 65

print("\x41 为 A 的 ASCII 代码")  # 输出:A 为 A 的 ASCII 代码

decimal_number = 42
binary_number = bin(decimal_number)  # 十进制转换为二进制
print('转换为二进制:', binary_number)  # 转换为二进制: 0b101010

octal_number = oct(decimal_number)  # 十进制转换为八进制
print('转换为八进制:', octal_number)  # 转换为八进制: 0o52

hexadecimal_number = hex(decimal_number)  # 十进制转换为十六进制
print('转换为十六进制:', hexadecimal_number) # 转换为十六进制: 0x2a

在这里插入图片描述

5. 字符串格式化

  详见前面的博客文章:
  Python基础:输入输出详解-输出字符串格式化

6. 字符串内建函数

  Python中提供了很多内置方法,用于字符串的各种操作,包括大小写转换、查找、替换等等,具体使用根据需要选择。

6.1 内置函数列表

方法描述
capitalize()返回原字符串的一个副本,将字符串的第一个字符转换为大写,其余字符转换为小写。
casefold()返回原字符串的一个副本,将字符串中所有字符转换为小写,并且处理更多的特殊字符,使其更适合进行字符串比较。
center(width)返回原字符串的一个副本,居中对齐,使用空格填充至指定的宽度。
count(sub[, start[, end]])返回子字符串在字符串中出现的次数。可选参数 start 和 end 指定搜索范围。
encode(encoding=‘utf-8’, errors=‘strict’)返回字符串的编码版本。可选参数 encoding 指定编码方式,默认为 ‘utf-8’。
endswith(suffix[, start[, end]])检查字符串是否以指定后缀结束,返回 True 或 False。可选参数 start 和 end 指定搜索范围。
expandtabs(tabsize=8)返回字符串的副本,其中的制表符(\t)将被空格替代,每个制表符替代为 tabsize 指定的空格数。
find(sub[, start[, end]])返回子字符串在字符串中第一次出现的位置,找不到返回 -1。可选参数 start 和 end 指定搜索范围。
format(*args, **kwargs)格式化字符串,使用传递的参数替换占位符。
format_map(mapping)格式化字符串,使用映射对象中的键值对替换占位符。
index(sub[, start[, end]])查找子字符串在字符串中第一次出现的位置,找不到会引发 ValueError。可选参数 start 和 end 指定搜索范围。
isalnum()如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。
isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
isdigit()如果字符串只包含数字则返回 True,否则返回 False。
isidentifier()如果字符串是一个合法的Python标识符则返回 True,否则返回 False。
islower()如果字符串中至少包含一个区分大小写的字符,并且所有这些(区分大小写)字符都是小写,则返回 True;否则返回 False。
isnumeric()如果字符串中的所有字符都是数字字符,则返回 True,否则返回 False。
isprintable()如果字符串中的所有字符都是可打印的,则返回 True,否则返回 False。
isspace()如果字符串只包含空格则返回 True,否则返回 False。
istitle()如果字符串是标题化的(每个单词的第一个字母大写),则返回 True,否则返回 False。
isupper()如果字符串中至少包含一个区分大小写的字符,并且所有这些(区分大小写)字符都是大写,则返回 True;否则返回 False。
join(iterable)返回一个由可迭代对象中的字符串拼接而成的字符串。
ljust(width)返回原字符串的一个副本,左对齐,并使用空格填充至指定长度。
lower()返回字符串的一个副本,将所有大写字母转换为小写。
lstrip([chars])返回原字符串的一个副本,去除左侧指定字符集合 chars 或空白字符。
partition(sep)根据分隔符 sep 将字符串分割成三部分,返回一个包含头部、分隔符和尾部的元组。
replace(old, new[, count])返回原字符串的一个副本,将所有出现的子字符串 old 替换为 new。可选参数 count 指定替换次数。
rfind(sub[, start[, end]])类似于 find() 方法,但是从右边开始查找。可选参数 start 和 end 指定搜索范围。
rindex(sub[, start[, end]])类似于 index() 方法,但是从右边开始查找。可选参数 start 和 end 指定搜索范围。
rjust(width)返回原字符串的一个副本,右对齐,并使用空格填充至指定长度。
rpartition(sep)根据分隔符 sep 将字符串从右边开始分割成三部分,返回一个包含头部、分隔符和尾部的元组。
rstrip([chars])返回原字符串的一个副本,去除右侧指定字符集合 chars 或空白字符。
split([sep[, maxsplit]])返回一个由分隔符 sep 拆分原字符串的列表。可选参数 maxsplit 指定拆分次数。
splitlines([keepends])返回一个包含字符串中的各行作为元素的列表,可选参数 keepends 指定是否保留换行符。
startswith(prefix[, start[, end]])检查字符串是否以指定前缀开头,返回 True 或 False。可选参数 start 和 end 指定搜索范围。
strip([chars])返回原字符串的一个副本,去除两侧指定字符集合 chars 或空白字符。
swapcase()回原字符串的一个副本,将所有大写字母转换为小写,所有小写字母转换为大写。
title()返回原字符串的一个副本,将每个单词的首字母大写。
upper()返回字符串的一个副本,将所有小写字母转换为大写。
zfill(width)返回原字符串的一个副本,在左侧使用零填充至指定的宽度。

6.2 部分方法示例

6.2.1 capitalize() - 将字符串的第一个字符转换为大写

original_string = "hello world"
capitalized_string = original_string.capitalize()
"""
将字符串的第一个字符转换为大写。在这个例子中,原始字符串是 "hello world",
经过 capitalize() 处理后,结果字符串是 "Hello world"。
"""
print(capitalized_string)

6.2.2 lower() - 将字符串中的所有字符转换为小写

original_string = "Hello World"
lowercased_string = original_string.lower()
"""
将字符串中的所有字符转换为小写。在这个例子中,原始字符串是 "Hello World",
经过 lower() 处理后,结果字符串是 "hello world"。
"""
print(lowercased_string)

6.2.3 upper() - 将字符串中的所有字符转换为大写

original_string = "Hello World"
uppercased_string = original_string.upper()
"""
将字符串中的所有字符转换为大写。在这个例子中,原始字符串是 "Hello World",
经过 upper() 处理后,结果字符串是 "HELLO WORLD"。
"""
print(uppercased_string)

6.2.4 replace() - 替换字符串中的子字符串

original_string = "I like apples"
new_string = original_string.replace("apples", "oranges")
"""
替换字符串中的子字符串。在这个例子中,原始字符串是 "I like apples",
经过 replace() 处理后,结果字符串是 "I like oranges"。
"""
print(new_string)

6.2.5 startswith() - 检查字符串是否以指定前缀开头

original_string = "Hello World"
starts_with_hello = original_string.startswith("Hello")
"""
检查字符串是否以指定前缀开头。在这个例子中,原始字符串是 "Hello World",
经过 startswith() 处理后,starts_with_hello 的值为 True。
"""
print(starts_with_hello)

6.2.6 endswith() - 检查字符串是否以指定后缀结束

original_string = "Hello World"
ends_with_world = original_string.endswith("World")
"""
检查字符串是否以指定后缀结束。在这个例子中,原始字符串是 "Hello World",
经过 endswith() 处理后,ends_with_world 的值为 True。
"""
print(ends_with_world)

6.2.7 split() - 使用指定的分隔符将字符串拆分为子字符串

original_string = "apple,orange,banana"
fruits_list = original_string.split(",")
"""
使用指定的分隔符将字符串拆分为子字符串。在这个例子中,原始字符串是 "apple,orange,banana",
经过 split() 处理后,fruits_list 的值为 ['apple', 'orange', 'banana']。
"""
print(fruits_list)

6.2.8 strip() - 去除字符串两侧的空白字符

original_string = "   Hello World   "
stripped_string = original_string.strip()
"""
去除字符串两侧的空白字符。在这个例子中,原始字符串是 "   Hello World   ",
经过 strip() 处理后,结果字符串是 "Hello World"。
"""
print(stripped_string)

7.注意事项

  使用字符串时,要考虑字符串的不可变性、字符编码、转义字符、格式化、连接方式等方面的问题,以确保代码的可靠性和性能。

  1. 字符串是不可变的
    在Python中,字符串是不可变的,这意味着一旦创建,就无法更改其内容。任何对字符串的操作都会创建一个新的字符串。如果需要对字符串进行频繁的修改,可能需要考虑使用其他可变类型,如列表。

  2. 编码和解码

    字符串是以特定的字符编码方式存储的。在处理文件、网络通信等情况时,确保正确地进行编码和解码操作是重要的。常见的字符编码包括UTF-8、UTF-16等。

  3. 转义字符

    在字符串中使用转义字符来表示特殊字符,例如换行符\n、制表符\t等。了解并正确使用转义字符可以避免意外的问题。

  4. 字符串格式化

    使用适当的方式进行字符串格式化,例如使用% 操作符、format() 方法或者 f-strings(Python 3.6及以上版本)。这有助于代码的可读性和维护性。

  5. 字符串连接

    避免在循环中频繁使用 + 操作符进行字符串连接,特别是当连接大量字符串时。这样的操作会创建多个临时字符串,影响性能。考虑使用 str.join() 方法。

  6. 字符串比较

    在比较字符串时,要注意大小写和空白字符。有时候使用 str.strip()去除两侧空格是比较字符串之前的一种好做法,以确保一致性。

  7. 原始字符串

    在处理正则表达式、文件路径等时,可以使用原始字符串(以 r 开头),以避免转义字符的影响。

  8. 性能优化

    对于大量字符串拼接的情况,考虑使用 str.join() 方法或者 io.StringIO 类来优化性能。这可以减少由于创建多个临时字符串而引起的性能问题。
    在这里插入图片描述

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

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

相关文章

【Python】巧用tkinter设计秒表计时器

秒表计时器是一种用于计算时间间隔的计时器。它通常由一个开始按钮、一个停止按钮和一个重置按钮组成。 使用方法: 单击“开始”按钮开始计时。单击“停止”按钮停止计时。单击“重置”按钮将计时器归零。 注意事项: 没有对计时器误差进行校准&#…

【密码学】【多方安全计算】不经意传输(Oblivious Transfer,OT)

文章目录 不经意传输(oblivious transfer)定义不经意传输的实例(1 out 2,二选一不经意传输)基于RSA的1 out 2 不经意传输疑问 不经意传输(oblivious transfer)定义 不经意传输(obli…

Spring之@Autowired 属性多实现和单实现源码解析

Autowired使用过程中遇到疑问,通过源码解析原因 一、起因1、当person只有一个实现类时,TestController中,Person属性随意取名。2、当有Person两个实现类时,TestController中,属性名称必须和实现类名一致(ma…

HarmonyOS 位置服务开发指南

位置服务开发概述 移动终端设备已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置。 当用户处于这些丰富的使用场景中时,系统的位置能力…

跨境电商崛起:揭秘全球化商机

随着科技的迅猛发展,跨境电商正崭露头角,成为商业新风口。这个数字化时代为全球商家带来了前所未有的机遇,同时也为消费者提供更广阔的购物选择。本文将深入探讨跨境电商的崛起,揭示其中隐藏的全球化商机,以及这一趋势…

【c++】多线程大幅缩减时间

多线程在进行复杂运算时能够大量节约时间 提醒自己能够在多线程运算的时候一定要充分利用 能够省下2/3的时间 测试代码 #include<vector> #include <iostream> #include <thread> using namespace cv; using namespace std; int result1 0 ; bool thread…

希亦和海尔内衣洗衣机哪款好用点?性价比小型洗衣机测评

在最近的这两年以来&#xff0c;专门用于清洗我们内衣裤等贴身衣物的小家电——内衣洗衣机&#xff0c;非常的火爆&#xff01;如今越来越多的人开始使用上了内衣洗衣机&#xff0c;不仅省时而且还省力。但是由于市面上内衣洗衣机产品众多&#xff0c;于是我挑选了希亦和海尔两…

overleaf上武大毕业论文开题报告本地参考文献编译报错

overleaf上武大毕业论文开题报告本地参考文献编译报错 具体报错内容 BibTeX subsystem: /tmp/biber_tmp_FDeB/b2e90af6edbf2e41914433623737dc27_16.utf8, line 4989, syntax error: found “spremont:1979”, expected “,” 解决方案 1.将参考文献编译工具设置为biber …

多段图的最短路径【java】

题目描述&#xff1a; [实验题目1] 设图G(V, E)是一个带权有向图&#xff0c;如果把顶点集合V划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k)&#xff0c;使得E中的任何一条边(u, v)&#xff0c;必有u∈Vi&#xff0c;v∈Vim (1≤i≤k, 1&#xff1c;im≤k)&#xff0c;则称图…

接口测试工具(Jmeter)必学技巧

安装 使用JMeter的前提需要安装JDK&#xff0c;需要JDK1.7以上版本目前在用的是JMeter5.2版本&#xff0c;大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin&#xff0c;双击jmeter.bat启动运行 启动后默认为英文版本&#xff0c;可通过Options – Cho…

案例034:基于微信小程序的课堂助手系统

文末获取源码 开发语言&#xff1a;PHP 框架&#xff1a;PHP 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序运行软件&#xff1a;微信开…

SAP MPN物料简介

MPN物料-Manufacturer Part Number (MPN) 我们将把它简称为MPN物料。所谓制造商零件号&#xff0c;指的是以制造商&#xff08;注意不是供应商&#xff09;作为区分依据&#xff0c;为事实上的同一种物料定义不同的物料号。 我们在业务逻辑中&#xff0c;一物一码是基本的业务…

FLASK博客系列5——模板之从天而降

我们啰啰嗦嗦讲了4篇&#xff0c;都是在调接口&#xff0c;啥时候能看到漂亮的页面呢&#xff1f;别急&#xff0c;今天我们就来实现。 来我们先来实现一个简单的页面。不多说&#xff0c;上代码。 app.route(/) def index():user {username: clannadhh}return <html>&…

职场经验:Python自动化生成漂亮的测试报告【干货】

运用Python的Unittest、数据驱动测试&#xff08;DDT&#xff09;、Excel、Jinja2和HTML技术&#xff0c;构建一个能够自动生成精美可视化测试报告的自动化测试框架 思路流程 封装读取数据&#xff0c;让所有数据都能够再excel中填写&#xff0c;不再填写任何一行逻辑代码 通…

C++算法 —— 贪心(5)

文章目录 1、合并区间2、无重叠区间3、用最少的箭引爆气球4、整数替换5、俄罗斯套娃信封6、可被3整除的最大和7、距离相等的条形码8、重构字符串 1、合并区间 56. 合并区间 在合并区间时&#xff0c;得先排序一下&#xff0c;方便判断。方便可以按照左或者右端点排序。很多问题…

StyleGAN 使用指南:生成更逼真的图片

StyleGAN 使用指南&#xff1a;生成更逼真的图片 提出背景&#xff1a;特征纠缠StyleGAN-v1 网络结构映射网络 Mapping network f生成网络 Synthesis network g训练技巧样式混合 mixing regularization截断 Truncation Trick 评估指标路径长度 Perceptual path length解耦&…

2019年3月14日 Go生态洞察:Go开发者网络新动态

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

洗眼镜的机器有哪些?眼镜超声波清洗机哪家强?眼镜清洗机推荐

由于自己经常佩戴眼镜&#xff0c;所以个人对清洗眼镜的要求害死挺高的&#xff0c;一周最少是需要清洗一次的&#xff0c;不然会感觉眼镜上会有非常多的细菌藏匿在污垢中&#xff0c;往往这些细菌没有清洁到位就会导致脸上长痘长螨虫的问题&#xff0c;所以看到这里的朋友们一…

灵茶 - 2023 - 11 - 27

B. Minimum Ternary String 链接 : Problem - 1009B - Codeforces 思路 : 10 , 12 可以互相交换&#xff0c;就代表着1可以出现在任何地方&#xff0c;要追求字典序最小&#xff0c;那么应该将所有的1放在哪里呢 ? 应该放在第一个2前面&#xff0c;要注意的是 : 没有2的…

C++基础 -3- 匿名空间,命名空间跨文件使用

匿名空间仅限本文件使用 创建匿名空间格式(图片代码段呈现) namespace {int a100; }命名空间的跨文件使用 namespace rlxy {int a100; }namespace rlxy {extern int a; }