在Python中,字符串是一种数据类型,用于表示文本数据。字符串是由字符组成的序列,可以包含字母、数字、符号和空格等字符。在Python中,你可以使用单引号('
)或双引号("
)来定义字符串。
1)使用单引号或双引号创建字符串
str1 = 'Hello, world!'
str2 = "Python Programming"
2) 使用三引号创建多行字符串
multiline_str = '''This is a
multi-line
string.'''
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!
在Python中,字符串是不可变(immutable
)的,这意味着一旦创建,就不能直接修改字符串的内容,但可以通过创建一个新的字符串来实现修改的效果。
# 尝试修改字符串中的某个字符(这会引发错误)
# 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
words = ["Hello", "World"]
result = " ".join(words)
print(result) # 输出:Hello World
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.
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)或其他可变对象。
在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
详见前面的博客文章:
Python基础:输入输出详解-输出字符串格式化
Python中提供了很多内置方法,用于字符串的各种操作,包括大小写转换、查找、替换等等,具体使用根据需要选择。
方法 | 描述 |
---|---|
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) | 返回原字符串的一个副本,在左侧使用零填充至指定的宽度。 |
original_string = "hello world"
capitalized_string = original_string.capitalize()
"""
将字符串的第一个字符转换为大写。在这个例子中,原始字符串是 "hello world",
经过 capitalize() 处理后,结果字符串是 "Hello world"。
"""
print(capitalized_string)
original_string = "Hello World"
lowercased_string = original_string.lower()
"""
将字符串中的所有字符转换为小写。在这个例子中,原始字符串是 "Hello World",
经过 lower() 处理后,结果字符串是 "hello world"。
"""
print(lowercased_string)
original_string = "Hello World"
uppercased_string = original_string.upper()
"""
将字符串中的所有字符转换为大写。在这个例子中,原始字符串是 "Hello World",
经过 upper() 处理后,结果字符串是 "HELLO WORLD"。
"""
print(uppercased_string)
original_string = "I like apples"
new_string = original_string.replace("apples", "oranges")
"""
替换字符串中的子字符串。在这个例子中,原始字符串是 "I like apples",
经过 replace() 处理后,结果字符串是 "I like oranges"。
"""
print(new_string)
original_string = "Hello World"
starts_with_hello = original_string.startswith("Hello")
"""
检查字符串是否以指定前缀开头。在这个例子中,原始字符串是 "Hello World",
经过 startswith() 处理后,starts_with_hello 的值为 True。
"""
print(starts_with_hello)
original_string = "Hello World"
ends_with_world = original_string.endswith("World")
"""
检查字符串是否以指定后缀结束。在这个例子中,原始字符串是 "Hello World",
经过 endswith() 处理后,ends_with_world 的值为 True。
"""
print(ends_with_world)
original_string = "apple,orange,banana"
fruits_list = original_string.split(",")
"""
使用指定的分隔符将字符串拆分为子字符串。在这个例子中,原始字符串是 "apple,orange,banana",
经过 split() 处理后,fruits_list 的值为 ['apple', 'orange', 'banana']。
"""
print(fruits_list)
original_string = " Hello World "
stripped_string = original_string.strip()
"""
去除字符串两侧的空白字符。在这个例子中,原始字符串是 " Hello World ",
经过 strip() 处理后,结果字符串是 "Hello World"。
"""
print(stripped_string)
使用字符串时,要考虑字符串的不可变性、字符编码、转义字符、格式化、连接方式等方面的问题,以确保代码的可靠性和性能。
字符串是不可变的
在Python中,字符串是不可变的,这意味着一旦创建,就无法更改其内容。任何对字符串的操作都会创建一个新的字符串。如果需要对字符串进行频繁的修改,可能需要考虑使用其他可变类型,如列表。
编码和解码
字符串是以特定的字符编码方式存储的。在处理文件、网络通信等情况时,确保正确地进行编码和解码操作是重要的。常见的字符编码包括UTF-8、UTF-16等。
转义字符
在字符串中使用转义字符来表示特殊字符,例如换行符\n
、制表符\t
等。了解并正确使用转义字符可以避免意外的问题。
字符串格式化
使用适当的方式进行字符串格式化,例如使用%
操作符、format()
方法或者 f-strings
(Python 3.6及以上版本)。这有助于代码的可读性和维护性。
字符串连接
避免在循环中频繁使用 + 操作符进行字符串连接,特别是当连接大量字符串时。这样的操作会创建多个临时字符串,影响性能。考虑使用 str.join()
方法。
字符串比较
在比较字符串时,要注意大小写和空白字符。有时候使用 str.strip()
去除两侧空格是比较字符串之前的一种好做法,以确保一致性。
原始字符串
在处理正则表达式、文件路径等时,可以使用原始字符串(以 r
开头),以避免转义字符的影响。
性能优化
对于大量字符串拼接的情况,考虑使用 str.join()
方法或者 io.StringIO
类来优化性能。这可以减少由于创建多个临时字符串而引起的性能问题。
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland