一、什么是数据容器
举个例子,一个办公室里有一群牛马,他们都有自己的名字,如果没有容器的概念,那么我们用变量来存放他们的名字,比如:
name1 = "翠花"
name2 = "玛丽"
name3 = "二狗子"
name4 = "疯子"
name5 = "麻雀花"
...
有几个人就需要几个变量来存储了,那么我们能有能有个好办法,不用那么繁琐呢,反正都是牛马,那我们搞个房间把牛马都放起来,比如这样:
牛马群 = ["翠花", "玛丽", "二狗子", "疯子", "麻雀花"]
只要一个变量就搞定。这种类似的变量就叫数据容器
python中的数据容器:一种可以容纳多份数据的数据类型,容纳的每一份数据成为一个元素,每一个元素,可以是任意的数据,比如字符串、数字、布尔等。
python中常用的数据类型:str(字符串)、list(列表)、tuple(元组)、set(集合)、dict(字典)
二、字符串定义
在 Python 的编程世界里,字符串是处理文本的得力助手,就像办公室里的打印机,能把各种文字信息整理得井井有条。对于刚接触编程的 “办公室牛马” 们来说,掌握字符串的用法,能让日常工作中的文本处理变得高效又轻松。
字符串是字符的容器,一个字符串可以存放任意数量的字符。
比如:helloworld
三、字符串的创建
在办公室写文件时,我们会用各种符号来标记内容,在 Python 里创建字符串也是一样。
用单引号 '
或双引号 "
把文本包起来,就创建了一个字符串。比如,要记录今天的工作任务:
task1 = '整理销售数据报表'
task2 = "撰写项目进度报告"
如果字符串里本身就有单引号,为了避免混乱,就用双引号来创建,反过来也可以。像这样:
note = "领导说:'下午开会'"
note = '领导说:"下午开会"'
四、字符串的下标(索引)
字符串里的元素,也就是一个个字符,访问的方式:
从前向后访问,从0开始,索引从 0 开始,第一个字符的索引是 0,第二个是 1,依次类推
从后向前访问,从-1开始,从字符串末尾开始数,最后一个字符的索引是 -1 ,倒数第二个是 -2
通过下表获取特定位置的字符
task = '核对财务数据'
print(task[0]) # 输出:核
print(task[-1]) # 输出:据
要是想查看一段内容,就用切片。切片就像从一长段文字里选中一部分。用方括号 []
,写成 变量[头下标:尾下标]
的形式,它会截取从 头下标
开始(包含这个字符)到 尾下标
结束(不包含这个字符)的内容。例如:
text = '会议在下午3点举行'
print(text[3:6]) # 输出:下午3
五、切片(可用于字符串、列表、元组)
1、序列
在将切片之前,我们先来了解一下什么叫序列
序列就是指:内容连续、有序,可以使用下标索引的一类数据容器,字符串、列表、元组都属于序列
2、序列的常用操作:切片
切片就是从一个序列中取出子序列。因为这里讲的是字符串,会用字符串做例子,后续的列表、元组也是同样的操作。
语法:容器[头下标:尾下标:步长]
头下标:表示从何处开始,可以留空,留空视作从头开始
尾下标(不含):表示何处结束,可以留空,留空视作截取到结尾
步长表示,依次取元素的间隔
步长1表示,一个个取元素
步长2表示,每次跳过1个元素取
步长N表示,每次跳过N-1个元素取
步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
2.1 正向切片
假如你在办公室收到一封邮件,主题是 email_subject = "重要项目进度汇报会议通知"
,现在你只想获取 “项目进度汇报” 这部分内容,就可以用正向切片来实现:
email_subject = "重要项目进度汇报会议通知"
project_report = email_subject[2:8]
print(project_report)
在这个例子中,email_subject
是字符串变量,2
是头下标,8
是尾下标。从索引 2 的字符 “项” 开始,到索引 8 之前的字符 “报” 结束,成功截取到了想要的内容。
2.2 反向切片
还是这个邮件主题,如果你想获取 “会议通知” 这部分内容,用反向切片更方便:
email_subject = "重要项目进度汇报会议通知"
meeting_notice = email_subject[-4:]
print(meeting_notice)
# 会议通知
这里 [-4:]
表示从倒数第 4 个字符 “会” 开始,一直到字符串末尾,这样就获取到了 “会议通知”。如果想获取从倒数第 6 个字符到倒数第 3 个字符的内容(不包含倒数第 3 个字符),可以这样写:
email_subject = "重要项目进度汇报会议通知"
partial_content = email_subject[-6:-3]
print(partial_content)
# 汇报会
2.3 切片步长
办公室里有个同事的工号 employee_id = "A1B2C3D4"
,你想每隔一个字符取一个,得到 ABCD,可以这样做:
employee_id = "A1B2C3D4"
extracted_id = employee_id[::2]
print(extracted_id)
# ABCD
如果想反向每隔一个字符取一个,得到 4321,可以这样:
employee_id = "A1B2C3D4"
reversed_extracted_id = employee_id[-1::-2]
print(reversed_extracted_id)
# 4D2B
2.4 切片的实际应用
在整理客户名单时,客户姓名都存放在字符串里,格式是 last_name + first_name
,现在要把姓和名分开。假设客户姓名是 customer_name = "张 三"
customer_name = "张 三"
last_name = customer_name[:1]
first_name = customer_name[2:]
print(f"姓:{last_name},名:{first_name}")
# 姓:张,名:三
五、更新字符串
虽然字符串一旦创建就不能直接修改,但我们可以通过 “拼接” 的方式达到类似更新的效果。比如,原本任务是 “写报告”,现在要改成 “写详细报告”:
old_task = '写报告'
new_task = old_task[:1] + '详细' + old_task[1:]
print(new_task) # 输出:写详细报告
六、转义字符
在办公室聊天时,有些特殊符号有特别的意思。在字符串里也一样,当我们想用一些特殊字符时,就要用反斜杠 \
来 “转义”。
\n
是换行符,让文字换行。就像在文档里按了回车键:message = "第一行\n第二行" print(message) # 第一行 # 第二行
\t
是制表符,用来对齐内容,跟按 Tab 键效果差不多print("姓名\t年龄\n小明\t25") # 姓名 年龄 # 小明 25
\\
表示一个反斜杠,\'
和\"
分别表示单引号和双引号。比如:print('他说:\'今天加班\'') # 他说:'今天加班'
七、字符串运算符
Python 给字符串准备了几个很有用的运算符:
连接运算符 +
:
可以把两个字符串连在一起,就像把两张纸粘起来。例如:
greeting = "你好," + "同事"
print(greeting) # 输出:你好,同事
重复运算符 *
:
能重复输出字符串。要是想表达很生气,就可以用这个:
print("烦死了!" * 3)
# 烦死了!烦死了!烦死了!
成员运算符 in
和 not in
:
用来检查某个字符或一小段字符串在不在另一个字符串里。比如,看看任务里有没有 “紧急” 这个词:
task = "完成紧急项目"
print("紧急" in task) # 输出:True
print("重要" not in task) # 输出:True
八、字符串格式化
在写邮件或者报告时,经常要把一些信息填到固定的格式里。在 Python 里,字符串格式化就能搞定这个。
格式化符号:
用 %
来格式化,这是比较传统的方法。比如,要在邮件里写自己的信息:
name = "小李"
age = 28
print("我叫%s,今年%d岁,负责%s工作。" % (name, age, "市场推广"))
# 我叫小李,今年28岁,负责市场推广工作。
常见的格式化符号有:
%s
:用来格式化字符串。%d
:格式化整数。%f
:格式化小数。
str.format()
方法:
从 Python2.6 开始有的新方法,更灵活好用。还是上面的例子:
name = "小李"
age = 28
print("我叫{}, 今年{}岁,负责{}工作。".format(name, age, "市场推广"))
# 我叫小李,今年28岁,负责市场推广工作。
还能指定顺序和用关键字:
print("{0}喜欢{1},{1}很有趣!".format("小王", "编程"))
print("{name}喜欢{hobby},{hobby}很有趣!".format(name="小张", hobby="画画"))
# 小王喜欢编程,编程很有趣!
# 小张喜欢画画,画画很有趣!
f-string方法:
Python3.6 之后出现的,以 f
开头,大括号 {}
里放变量或表达式,会自动计算并替换。例如:
project = "机器人研发"
print(f"正在进行{project}项目")
# 正在进行机器人研发项目
在 Python3.8 里,还能用 =
显示表达式和结果:
x = 5
print(f"{x + 2 = }") # 输出:x + 2 = 7
九、三引号
有时候写报告,内容很多,要跨好几行。
在 Python 里,三引号('''
或 """
)就能搞定这种情况。它可以让字符串跨多行,里面还能有换行符、制表符这些特殊字符。比如写个会议纪要:
meeting_minutes = """会议主题:项目进度汇报
会议时间:下午2点
参会人员:各部门负责人
会议内容:
1. 各部门汇报项目进展。
2. 讨论遇到的问题及解决方案。
"""
print(meeting_minutes)
如前面介绍过的,三引号也用在注释和函数文档说明里
十、字符串内建函数
Python 给字符串准备了好多 “小工具”,也就是内建函数,能帮我们处理各种文本问题。
查找与统计:
count()
:统计某个子字符串出现的次数。
比如统计报告里 “问题” 出现了几次:report = "项目中存在一些问题,问题还需进一步探讨" print(report.count("问题")) # 输出:2
find()
和rfind()
:找子字符串第一次出现的位置,find()
从左往右找,rfind()
从右往左找,找不到就返回 -1 。index()
和rindex()
:和上面两个类似,但找不到时会报错。
判断相关:
isalnum()
:检查字符串是不是由字母和数字组成。比如检查员工编号:id_number = "A12345" print(id_number.isalnum()) # 输出:True
isalpha()
:判断是不是全是字母或中文字。isdigit()
:看是不是只有数字。还有
islower()
、isupper()
、isspace()
等,分别用来判断大小写、是不是空白字符。
转换操作:
upper()
和lower()
:把字符串里的字母变成大写或小写。比如把邮件标题全部大写title = "hello, guy" print(title.upper()) # 输出:HELLO, GUY
title()
:把字符串变成标题格式,每个单词首字母大写。swapcase()
:大小写互换。
其他常用函数:
len()
:返回字符串的长度,就像数文档有多少字:text = "今天的工作完成了" print(len(text)) # 输出:8
strip()
、lstrip()
和rstrip()
:分别用来去掉字符串两边、左边、右边的空格或指定字符。replace()
:替换字符串里的内容。比如把 “完成” 换成 “搞定”:task = "完成任务" new_task = task.replace("完成", "搞定") print(new_task) # 输出:搞定任务
split()
:用指定的字符把字符串切开,变成一个列表。比如按逗号拆分任务列表:tasks = "任务1,任务2,任务3" task_list = tasks.split(",") print(task_list) # 输出:['任务1', '任务2', '任务3']