一 字符串
① 基本概念
1)字符串是一个'字符序列(sequence)'
2)默认基于'utf-8编码'
补充:python2.x 对'中文'支持-->第一行'# coding: utf-8',并且将'源文件保存'为UTF-8字符集
3)python没有'char'类型,'一个字符'也是字符串
② python没有char类型
核心: '字符串序列'
③ 构建字符串
1)单引号
附加: str1 = 'He is a "boy"!'
2)双引号
+++++++++++"几种"典型场景+++++++++++
str1 = "Jason say \"I like you\""
str2 = 'Jason say "I like you"'
str3 = "I'm wzj!"
++++++++++(1) '单引号'与"双引号"的用法比较++++++++++
1). 二者通常用于'单行字符串'的表示,也可通过使用'\n换行'后表示'多行'字符串
2). 使用'单引号'表示的字符串中可以'直接使用双引号'而'不必进行转义',使用双引号表示的字符串'同理'
备注:python的''与shell中的''意义不一样
思考:为什么python需要那么'多种字符串表示'方式? 答案就是为了体现'python的人性化'.
3)三引号 长字符串形式
场景:当程序有'大段的文本(需要跨行)'需要定义成字符串,'优先推荐'使用长字符串形式
具体:yum要安装多个'基础'包
优点:可以包含'任意'的内容,包括单引号和双引号("不用考虑转义")
'变相注释':定义的字符串'没有赋值'给任何变量,那么这个字符串相当于'被解释器忽略',相当于注释.
补充:不管是单引号、双引号、三引号,都支持转义字符"\n"、"\t"之类的
4)input获取用户输入
"python3.x"input内置函数:向用户生成一条'提示',获取用户输入,input函数返回一个'字符串'(type判断)
注意:由于返回的默认是字符串,所以对于需要'数字'的,需要int'强转'
+++++++++++"补充知识点"+++++++++++
python2.x的raw_input()函数'是'python3.x的input函数
Python2.x的input函数:输入必须是'符合python语法'的表达式
符合python语法: 比如'字符串就必须加双引号'、1(数字)、等、特点:'不会被自动转化'为字符串.
5)构造方法 强转为字符串
6)原始字符串
原始字符串以'r'开头,用''或""包围原始字符串
特点:'所见即所得',原始字符串"不会"把'反斜杠'当作特殊字符
++++++++++++++"应用场景"++++++++++++++
早期: windows路径 --> "C:\\wzj\\a.txt"
现在: windows路径 --> r'C:\wzj\a.txt'
报错的'原因': 原始字符串中的'反斜杠\'仍然'会对引号转义',所以'原始字符串'的结尾'不能是反斜杠'
++++++++++++++"注意事项"++++++++++++++
原始字符串中包含'引起歧义'的引号:同样需要对引号转义 -->'引号精准匹配,字符串范围'
++++++++++++++"解决策略"++++++++++++++
(1) 三引号包括
(2) 通过'空格(空白字符)'字符串拼接
r'Hello wzj' "\\"
补充:这种'空格'方式,常用来做'字符串与变量'拼接
④ 字符串格式化 占位符
⑤ 字符串拼接
方式1: 空白字符
方式2: '字符串之间'的'直接'拼装 -->'+'
细节:python'不允许不同类型'直接拼接;'数值和字符串',如果要拼接必须'先转换成字符串'
num = 10
str1 = 'Java'
# str()内置类型;repr函数以python'表达式'形式表示值-->字符串会自动加'引号'
print(str1 + str(num))
强调: 任何东西'只要print',相当于'字符串化了'
二 字符串的核心方法
字符串是'不可变类型-->immutable',不可'修改'
① 可修改的误区 is关键字
说明: '同一个字符串'在内存中'只有一份',类似Java的'字符串常量池'
字符串是'不可变'对象,是'无法修改'的
说明: 生成的是'新(new)'字符串,而不是对'原'字符串的修改
(1)查
① 索引
特点: 通过'下标(index)'来访问字符,从'0'开始
核心: '切片',-->[a,b)
membership'成员运算符' --> 'in、not in' --> Boolean'(子串是否存在)'
② 判断
++++++++'字符串其它判断'++++++++
1)S.startswith(prefix[,start[,end]]) #是否以prefix开头
2)S.endswith(suffix[,start[,end]]) #以suffix结尾
3)S.isalnum() #是否全是字母和数字,并至少有一个字符
4)S.isalpha() #是否全是字母,并至少有一个字符
5)S.isdigit() #是否全是数字,并至少有一个字符
6)S.isspace() #是否全是空白字符,并至少有一个字符
7)S.islower() #S中的字母是否全是小写
8)S.isupper() #S中的字母是否便是大写
9)S.istitle() #S是否是首字母大写的
1)is、is not -->identity -->'是不是什么类型' -->必须'先type'转换,'再判断'
print(type(name) is str)
2)是不是以什么'开头、结尾'结尾-->判断
print(wzj.startswith('wz'))
print(wzj.endswith('zj'))
3)是否'包含'-->'in'、'not in'
③ 格式化输出
++++++++++++'新式字符串格'式化++++++++++++
1)语法:str.format -->通过'调用字符串对象'的.format() 方法进行'格式化'
2)在'Python3引入'了一个新的字符串格式化的方法,并且'随后支持了Python2.7'
3)这个"新式"的字符串格式化方法'摆脱了%操作符',并且使得字符串格式化的语法'更规范'了
4)使用 format() 来做简单的'基于位置{0开始}'的字符串格式化,和使用"旧式"格式化是'一样'的
5)通过'变量名'来进行替换,且'不用担心'变量的位置,这个强大的特性可以在'不改变'format()的传入参数的情况下,允许'重新调整'显示的位置
注意:字符串格式化的两种方式-->"%"和'format和{}'
④ 分割和合并
split 默认空格'分割' --> 一般需要字符串具有'一定的特性'
join -->一般' '、'-'、','、'/'、':'
⑤ 大小写转换
⑥ 统计
⑦ 运算符
print('wzj' == 'java') -->'值是否相等'
print('zwzz' > 'zwff') -->字符相同,比较下一位-->一个一个字符'ASCII'比较过去,碰到'能决定大小'的,就'直接返回'
⑧ 去空格
⑨ 查找
⑩ 替换
str1 = 'wzj.com is a company'
⑪ 映射
⑫ 复制