Python小白之字符串学习笔记
前言
本次学习笔记主要记录了Python中字符串的定义、字符串的操作函数(有很多只挑了几个),以及算法里面会用到的字符串的字串的计算公式和Python中格式化输出字符串操作。
1.Python字符串定义
C系列(C、C++等)、Java语言中通过单引号(')起始和结束表示字符、双引号(")起始和结束来表示字符串;Python中字符串定义类似,既能使用单引号(')、也能使用双引号(")定义字符串,但是Python没有区分字符和字符串,均统称为字符串。
Python字符串定义:
- 单引号(')起始和结束
- 双引号(")起始和结束
- 三个单引号(‘’')起始和结束
- 三个双引号(“”")起始和结束
# 字符串定义(4种定义)
string = 'hello python'
print(string)
string = "hello python"
print(string)
string = '''hello python'''
print(string)
string = """hello python"""
print(string)
打印结果:
hello python
hello python
hello python
hello python
当然还是有点区别的:
直接看示例:
# 字符串定义区别
str_single_quotes = ('hello '
'world')
str_double_quotation_mark = ("hello "
"world")
str_three_single_quotation_marks = '''hello
world'''
str_three_double_quotation_marks = """hello
world"""
str_double_quotation_mark1 = "hello\n world"
str_three_single_quotation_marks1 = '''好好学习,
天天向上!'''
str_three_double_quotation_marks1 = """会当凌绝顶,
一览众山小。"""
print(str_single_quotes)
print(str_double_quotation_mark)
print(str_three_single_quotation_marks)
print(str_three_double_quotation_marks)
print(str_three_single_quotation_marks1)
print(str_three_double_quotation_marks1)
print(str_double_quotation_mark1)
打印结果:
hello world
hello world
hello
world
hello
world
好好学习,
天天向上!
会当凌绝顶,
一览众山小。
hello
world
从结果可以发现:
- 前两个字符串“hello world”虽然在代码里面是换行了(按下回车键后编辑器自动加了圆括号),实际打印然并卵;
- 接着后面两个字符串“hello ”和“world”出现了换行的效果;
- 最后的口号和古诗不但保持换行的效果,而且空格也保留了下来;
- 总的来说就是,单引号(‘)和双引号(")不能保留原样格式,要达到换行效果只能转义字符\n实现,而三个单引号(’‘’)和三个双引号(“”“)定义的字符串保留了原样格式;当然单引号(')和双引号(”)比较常用,而三个单引号(‘’')和三个双引号(“”")通常用于函数说明或者是代码文档说明使用。
2.Python str操作函数
字符串类型为不可变类型,即一旦赋值了在内存中存在直到内存释放回收,故大部分操作函数都会返回新的值,而字符串对像本身的值没有改变(仅个人观点,方便记忆字符串操作的特点,一些考试或认证会在这儿挖坑!)。
比如如下代码(字符串替换函数):
str_ = "123abc456"
str_.repalce('abc', '')
print(str_ )
打印结果:
123abc456
函数会返回替换后的新的值,即”123456“,原来的值并没有改变,还是”123abc456“。
(1)获取字符串长度(不是字符串的成员函数)— len()
str_ = "123abc456"
print(len(str_))
打印结果:
9
(2)字母大小写操作函数—upper()和lower()
string = 'abcd'
string_upper = string.upper()
print(string)
print(string_upper)
string_lower = string_upper.lower()
print(string_upper)
print(string_lower)
打印结果:
abcd
ABCD
abcd
ABCD
abcd
(3)字串替换函数—replace()
语法格式:
str.replace(aim_sub_str, replace_str)
str为变量名,aim_sub_str为将被替换的字符(串),replace_str为替换后的字符(串)。
- 字符替换
str_ = 'aaabbbccc'
str_new = str_.replace('a', 'x')
print(str_)
print(str_new) # 'a'--->'x'
打印结果:
aaabbbccc
xxxbbbccc
- 字串替换
str_ = '123abc456def'
str_new = str_.replace('abc', '') # 'abc'--->空,即达到移除abc的效果
print(str_)
print(str_new)
打印结果:
123abc456def
123456def
(4)字串查找函数—find和rfind()
语法格式:
str.find(aim_sub_str) 或 str.rfind(aim_sub_str)
str为变量名,aim_sub_str为要查找的字符(串)
- find()
返回值为第一个匹配值字串的起始索引(哪怕有多个字串也只返回第一个),若没有则返回-1。
index = str_.find('a')
print(index)
index = str_.find('x')
print(index)
index = str_.find('abc')
print(index)
打印结果:
3
-1
3
- rfind()
返回值为最后一个匹配值字串的起始索引(哪怕有多个字串也只返回最后一个),若没有则返回-1。
index = str_.rfind('a')
print(index)
index = str_.rfind('x')
print(index)
index = str_.rfind('abc')
print(index)
打印结果:
12
-1
12
3.字符串子串个数
N = n ∗ ( n + 1 ) 2 + 1 N=\frac{n*(n+1)}{2}+1 N=2n∗(n+1)+1
N 为字串个数, n 为字符串长度 N为字串个数, n为字符串长度 N为字串个数,n为字符串长度
提示:N包括字符串本身和空字符,有些考试或者认证会在这里挖坑,除去字符串本身和空串,各自减去1即可。
4.格式化输出字符串
Python中格式化输出字符串的三种方式:
- 格式化操作符(%)
- format函数
- f-string
(1)格式化操作符(%)
name = "LiSi"
age = 18
amplitude = 1.7687
print("姓名:%s,年龄:%d, 身高:%.2f" % (name, age, amplitude))
打印结果:
姓名:LiSi,年龄:18, 身高:1.77
(2) %d 和 %f 格式化补充说明!
其中,这里中点学了一下,%d 和 %f 的格式化操作,在百分号(%)和格式符号之间可以指定数字占位数(不足时用0或空格填充)或小数的保留位数。
- %d
(1) 百分号(%)和格式符(d)之间数据为常规整数,则数值的长度小于占位符长度时,使用空格填充不足的位数;
(2) 百分号(%)和格式符(d)之间数据为0开头的数字,则数值的长度小于占位符长度时,使用0填充不足的位数;
(3)数值的长度大于指定占位符长度时,则按照数值本身的长度输出。
语法格式 | 说明 |
---|---|
%d | 简洁方式 |
%2d | 最少占2位(≥2),空格填充 |
%02d | 最少占2位(≥2),0 填充 |
- %f
小数格式化的小数位数指定格式为:数字1+英文句号(.) + 数字2,数字1为整体的占位长度格式化(参照 %d ),数字2为小数保留位数(四舍五入);
如 %2.2f 即整数部分占位为2,小数部分为保留2位小数,若指定小数位数小于浮点数的本身长度,则按照四舍五入保留指定位数;若大于浮点数的本身长度,则用0填充到末尾;默认不指定则保留6位小数。
语法格式 | 说明 |
---|---|
%f | 简洁方式(保留6位小数) |
%.nf | 保留n位小数,四舍五入 |
% m.nf | 整体字符串占位为m,若m不是0开头的数字,则空格填充,否则 0 填充,如 %10.2整体为长度不足 (<10) 时用 空格 填充,%010.2f整体为长度不足 (<10) 时用 0 填充 |
- %d
number = 6
print("number的普通格式化输出为:%d" % number)
print("number的占位6位(空格填充)式化输出为:%6d" % number)
print("number的占位6位(0填充)式化输出为:%06d" % number)
输出结果:
number的普通格式化输出为:6
number的占位6位(空格填充)式化输出为: 6
number的占位6位(0填充)式化输出为:000006
- %f
number = 1.123456789
print("number的默认格式化输出为:%f" % number)
print("number的保留6位小数输出为:%.6f" % number)
print("number的保留5位小数输出为:%.5f" % number)
print("number的保留12位小数输出为:%.12f" % number)
print("number的整体长度为10(空格填充)、保留6位小数的格式化输出为:%10.6f" % number)
print("number的整体长度为10(0 填充)、保留6位小数的格式化输出为:%010.6f" % number)
打印结果:
number的默认格式化输出为:1.123457
number的保留6位小数输出为:1.123457
number的保留5位小数输出为:1.12346
number的保留12位小数输出为:1.123456789000
number的整体长度为10(空格填充)、保留6位小数的格式化输出为: 1.123457
number的整体长度为10(0 填充)、保留6位小数的格式化输出为:001.123457
(2)format函数
format函数则通过花括号({})来占位,同时还可以通过在花括号({})内添加数字指定参数序号,如:{1},就是指定format参数列表中的第一个参数。
语法格式;
- “参数0{},参数1{1},参数2{2}”.format(para0, para1, para2)
- “参数0{0},参数1{1},参数2{2}”.format(para0, para1, para2)
- 默认(按照参数列表顺序填充)
name = "LiSi"
age = 18
print("姓名:{},年龄:{}".format(name, age))
打印结果:
姓名:LiSi,年龄:18
- 指定参数列表顺序
name = "LiSi"
age = 18
print("姓名:{0},年龄:{1}".format(name, age))
print("姓名:{1},年龄:{0}".format(name, age))
打印结果:
姓名:LiSi,年龄:18
姓名:18,年龄:LiSi
(3)f-string
这种方式就最简洁的写法了,我还是比较喜欢这种格式化输出方式,相当于结合前两种的用法。
语法 | 说明 |
---|---|
普通模式:f"{}" | 无 |
整数高级模式:f"{para:10}" 或 f"{para:010}" | 指定整数占位长度和符号 |
小数高级模式:f"{para:.2}" 或 f"{para:5.2}" 或 f"{para:05.2}" | 指定整数占位长度和符号 |
name = "LiSi"
age = 18
amplitude = 1.7687
print(f"姓名:{name},年龄:{age},身高{amplitude}")
print(f"姓名:{name},年龄:{age:10},身高{amplitude:.2}")
print(f"姓名:{name},年龄:{age:010},身高{amplitude:10.2}")
print(f"姓名:{name},年龄:{age:010},身高{amplitude:010.2}")
打印结果:
姓名:LiSi,年龄:18,身高1.7687
姓名:LiSi,年龄: 18,身高1.8
姓名:LiSi,年龄:0000000018,身高 1.8
姓名:LiSi,年龄:0000000018,身高00000001.8
5.知识小结
此人很懒,什么都没写!