Python初学小知识(五):字符串
Python初学小知识(五):字符串
- 九、字符串
- 1. 字符串使用范围广、且极其方便
- 字符串的切片是是半闭半开区间,不包括最后的位置。
- 2. 字符串的各种方法
- 2.1 大小写转换
- 2.2 左中右对齐
- 2.3 查找
- 2.4 替换
- 2.5 判断
- 2.6 截取
- 2.7 拆分和拼接
- 3. format()语法格式化字符串
- 3.1 [align]
- 3.2 [sign]
- 4. 在python3中,默认使用UTF-8 Unicode来进行编码,Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
C语言和Python经常弄混,尤其总是忍不住给Python后面加分号……干脆给自己做个笔记省的忘了。。。(小甲鱼那边的)
- 在 Python初学小知识(一)中已经有部分关于字符串的讲解,本文是在那个基础上更进一步。
九、字符串
1. 字符串使用范围广、且极其方便
'''判断是否是回文数'''
>>> x = '123454321'
>>> '是回文数' if x == x[::-1] else '不是回文数'
'是回文数'
字符串的切片是是半闭半开区间,不包括最后的位置。
2. 字符串的各种方法
2.1 大小写转换
>>> x = 'I love FishC'
>>> x.capitalize() #首字母大写,其余都小写
'I love fishc' #返回的并不是源字符串,字符串是不可变的,这只是新生成了一个字符串
>>> x.casefold() #全部小写
'i love fishc'
>>> x.title() #所有单词的首字母大写,其余全部小写
'I Love Fishc'
>>> x.swapcase() #大小写翻转
'i LOVE fISHc'
>>> x.upper() #全部大写
'I LOVE FISHC'
>>> x.lower() #全部小写
'i love fishc'
'''casefold可以处理其他语言的小写,lower只能处理英文字母'''
2.2 左中右对齐
首先都要指定宽度,如果width比源字符串总长度小,则按源字符串输出:
>>> x = '你好,世界!'
>>> x.center(10) #居中
' 你好,世界! '
>>> x.ljust(10) #左对齐
'你好,世界! '
>>> x.rjust(10) #右对齐
' 你好,世界!'
>>> x.zfill(10) #左填充0,用于指定长度时
'0000你好,世界!'
还可以对空白做补充:
>>> x = '你好,世界!'
>>> x.center(10, '0')
'00你好,世界!00'
>>> x.ljust(10, '我')
'你好,世界!我我我我'
2.3 查找
>>> x = '上海自来水来自海上'
'''查找次数'''
>>> x.count('海')
2
>>> x.count('海', 0, 5) #查找片段中的次数
1'''查找索引'''
>>> x.find('海') #从左往右找
1
>>> x.rfind('海') #从右往左找
7
>>> x.rfind('海',0,5) #从下标5的位置从右往左找
1
>>> x.rfind('海',4,9)
7
这个查找索引和index()的区别在于,当查找的内容不存在于字符串时,find()和rfind()返回-1,而index()报错
2.4 替换
把Tab全部替换成空格:
>>> code = '''My name is Buranny. Your name is Aamy.''' #上一行用Tab缩进,下一行用4个空格缩进
>>> new_code = code.expandtabs(4) #把Tab全部用4个空格表示
>>> new_code
'\n My name is Buranny.\n Your name is Aamy.'
>>> print(new_code)My name is Buranny.Your name is Aamy.
新字符串替换旧字符串,count表示替换次数,一般默认为-1,表示全部替换:
>>> '我爱我家'.replace('我', '你', -1) #此时也可以省略-1
'你爱你家'
>>> '我爱我家'.replace('我', '你', 1)
'你爱我家'
首先给出转换规则,再用translate进行转换:
>>> table = str.maketrans('ABCDEFG', '1234567')
>>> 'My Boy Lika Apple'.translate(table)
'My 2oy Lika 1pple'
>>> 'My Boy Lika Apple'.translate(str.maketrans('ABCDEFG', '1234567')) #结果相同
'My 2oy Lika 1pple'
>>> 'My Boy Lika Apple'.translate(str.maketrans('ABCDEFG', '1234567', 'Myle'))
' 2o Lika 1pp' #将指定的字符串中存在的元素忽略,所有的M、y、l、e全忽略了
2.5 判断
判断位置:
>>> x = '我爱python'
>>> x.startswith('爱') #判断字符串是否在起始位置
False
>>> x.startswith('我')
True
>>> x.startswith('爱', 1, 5)
True>>> x.endswith('on') #判断字符串是否在末尾位置
True
>>> x.endswith('py',0 ,3)
False
>>> x.endswith('py',0 ,4)
True>>> if x.startswith(('我', '你', '他')): #还可以利用元组判断print('yes')yes
判断大小写:
>>> x = 'I love Python'
>>> x.istitle() #是否只有首字母大写,其余字母小写
False
>>> x = 'I Love Python'
>>> x.istitle()
True>>> x = 'I AM SINGER'
>>> x.isupper() #是否全是大写
True
>>> x.upper().isupper() #先upper()全部转换成大写,然后isupper()是否全部大写
True
>>> x = 'I AM SINGER'
>>> x.islower() #是否全是小写
False
判断类型:
>>> x = 'I love Python'
>>> x.isalpha() #是否全是字母
False #有空格
>>> ' \n'.isspace() #单引号里面是缩进、空格、转义字符,判断是否是空白字符串
True
>>> 'I love Python'.isprintable() #是否可打印
True
>>> 'I love Python\n'.isprintable() #转义字符不可打印
False
判断数字类型:
具体见isdigit()、isnumeric()和isdecimal()的区别。在isalpha()、isdigit()、isnumeric()和isdecimal()中,任意一个返回True,isalnum()都返回True。
判断是否是一个合法的python标识符(变量名必须是一个合法的python标识符):
>>> 'my god'.isidentifier()
False
>>> 'my_god'.isidentifier()
True
>>> 'my10'.isidentifier()
True
>>> '10my'.isidentifier() #标识符不能以数字开头
False
判断是否为python的保留标识符(if、for之类的):
>>> import keyword
>>> keyword.iskeyword('if')
True
>>> keyword.iskeyword('py')
False
2.6 截取
>>> ' 去除左侧的空白'.lstrip()
'去除左侧的空白'
>>> '去除右侧的空白 '.rstrip()
'去除右侧的空白'
>>> ' 去除两侧的空白 '.strip()
'去除两侧的空白'
其中,chars=None表示什么都没有,就是去除空白的意思,可以在这里传入要去除的字符串:
>>> 'www.ilovefishc.com'.lstrip('wcom.')
'ilovefishc.com'
>>> 'www.ilovefishc.com'.rstrip('wcom.')
'www.ilovefish'
>>> 'www.ilovefishc.com'.strip('wcom.')
'ilovefish''''
在这里,以第一个举例,是对'www.ilovefishc.com'这个字符串从左到右按照字符进行查找,直到不在被删除字符串为止'wcom.':
首先,三个'w'都在'wcom.'中,删除;
接着,'.'在'wcom.'中,删除;
然后,'i'不在'wcom.'中,停止查找。
并不是整体删除'wcom.'的意思。
'''
整体删除字符串:
>>> 'www.ilovefishc.com'.removeprefix('www.') #删除指定前缀
'ilovefishc.com'
>>> 'www.ilovefishc.com'.removesuffix('.com') #删除指定后缀
'www.ilovefishc'
2.7 拆分和拼接
拆分:
>>> 'www.ilovefishc.com'.partition('.') #从左到右找分隔符,以'.'为标志拆分,仅拆分一次
('www', '.', 'ilovefishc.com')
>>> 'www.ilovefishc.com'.rpartition('.') #从右到左找分隔符,以'.'为标志拆分,仅拆分一次
('www.ilovefishc', '.', 'com')>>> 'www.ilovefishc.com'.split('.') #从左到右找分隔符,以'.'为标志拆分,全部拆分
['www', 'ilovefishc', 'com']
>>> 'www.ilovefishc.com'.split('.',1)
['www', 'ilovefishc.com']
>>> 'www.ilovefishc.com'.rsplit('.',1) #从右到左找分隔符,以'.'为标志拆分,仅拆分一次
['www.ilovefishc', 'com']>>> '你\n我\r他\n\r她'.splitlines() #以换行符进行拆分,默认为False,表示结果不包含换行符
['你', '我', '他', '', '她']
>>> '你\n我\r他\n\r她'.splitlines(True) #改为False,表示结果包含换行符
['你\n', '我\r', '他\n', '\r', '她']
拼接:
>>> '.'.join(['www', 'ilovefishc', 'com']) #这里是把要拼接的子字符串以列表的方式包裹起来,用元组也可以
'www.ilovefishc.com'#用加号也可以拼接,但是join更快:
>>> x = 'fishc'
>>> x += x
>>> x
'fishcfishc'
>>> ''.join(('fishc', 'fishc'))
'fishcfishc'
3. format()语法格式化字符串
>>> '1+2={}, 2^2={}, 3^3={}'.format(1+2, 2*2, 3*3*3)
'1+2=3, 2^2=4, 3^3=27'#可以在花括号中写上数字表示是哪一个内容(位置索引):
>>> '{}看到{}就很激动'.format('我', '你')
'我看到你就很激动'
>>> '{1}看到{0}就很激动'.format('我', '你')
'你看到我就很激动'
#参数中的字符串被当作元组的元素来对待,所以下标是从0开始,花括号中是索引值#同一个索引值可以被引用多次:
>>> '{0}{0}{1}{1}'.format('是', '非')
'是是非非'#也可以使用关键字参数:
>>> '我叫{name},我爱{fav}。'.format(fav='Python', name='三耳01') #这时候元组中的顺序就不重要了
'我叫三耳01,我爱Python。'#位置索引和关键字索引可以结合起来:
>>> '我叫{name},我爱{0},{0}很好玩。'.format('Python', name='三耳01')
'我叫三耳01,我爱Python,Python很好玩。'#输入花括号
>>> '{}, {}, {}'.format(1, '{}', 2) #把花括号看成字符串
'1, {}, 2'
>>> '{}, {{}}, {}'.format(1, 2) #用花括号注释花括号,元组中就只是剩下的了
'1, {}, 2'
更多用法:
[[fill]align][sign][#][0][width][grouping_option][.precision][type]
3.1 [align]
>>> '{:^10}'.format('apple') #宽度为10,^表示居中
' apple '
>>> '{1:<6}{0:>6}'.format('boy', 'cat') #宽度为6,1表示索引为1,即'cat',<表示居左,>表示居右
'cat boy' #位置索引改成关键字索引也一样
>>> '{c:<6}{b:>6}'.format(b='boy', c='cat')
'cat boy'#感知正负号填充0(只对数字有效):
>>> '{:09}'.format(55) #宽度为9
'000000055'
>>> '{:09}'.format(-55)
'-00000055'#可以指定填充的字符(此时不是感知正负号填充0,就需要表示位置了):
>>> '{:%^9}'.format(55)
'%%%55%%%%'
>>> '{:%>9}'.format(-55)
'%%%%%%-55' #这里没有感知正负号,而如果想感知正负号,则换成等于号:
>>> '{:%=9}'.format(-55)
'-%%%%%%55' #同理,前面填充0的时候也可以是:
>>> '{:0=9}'.format(-55)
'-00000055'
3.2 [sign]
>>> '{:+} {:+}'.format(1, -1)
'+1 -1'
>>> '{:-} {:-}'.format(1, -1)
'1 -1'
>>> '{: } {: }'.format(1, -1)
' 1 -1'
设置千分位的分隔符:
>>> '{:,}'.format(1234567)
'1,234,567'
>>> '{:_}'.format(1234567)
'1_234_567'
精度(不允许用在整数上):
>>> '{:.2f}'.format(3.1415) #限定小数点后多少位
'3.14'
>>> '{:.2g}'.format(3.1415) #限定小数点前后多少位
'3.1'
>>> '{:.6}'.format('I love Python') #限定非数字类型最大字段的大小
'I love'
类型type:
整数:
>>> '{:b}'.format(80)
'1010000'
>>> '{:c}'.format(80)
'P'
>>> '{:d}'.format(80)
'80'
>>> '{:o}'.format(80)
'120'
>>> '{:x}'.format(80)
'50'
>>> '{:#b}'.format(80) #加上一个#号,会在结果中加入前缀
'0b1010000' #加上了一个0b表示是二进制
小数:
>>> '{:e}'.format(30)
'3.000000e+01' #这里的科学计数法的小数是6位
>>> '{:f}'.format(3.1415)
'3.141500' #小数6位
>>> '{:g}'.format(123456789) #g通用,大数
'1.23457e+08'
>>> '{:g}'.format(1234.56789) #g通用,小数
'1234.57'
>>> '{:%}'.format(0.98)
'98.000000%'
>>> '{:.2%}'.format(0.98) #更改精度
'98.00%'
>>> '{:.{prec}%}'.format(3.1415, prec=2) #用关键字更改精度
'314.15%'
>>> '{:{fill}{align}{width}.{prec}{ty}}'.format(3.1415, fill='+', align='^', width=10, prec=3, ty='g')
'+++3.14+++'
>>> '{:.4g}'.format(3.1415) #四舍五入
'3.142'
>>> '{:.3%}'.format(3.1415) #%和g表示的精度不一样,g是限定小数点前后多少位,前面已经说了
'314.150%'
f/F-字符串:可以看作是format()的一个语法糖,进一步简化操作,并且带来了功能上的提升(python3.6的产物,format()兼容性更高,所以更广泛):
>>> '1+2={}, 2^2={}, 3^3={}'.format(1+2, 2*2, 3*3*3)
'1+2=3, 2^2=4, 3^3=27' #就可以变成:
>>> f'1+2={1+2}, 2^2={2*2}, 3^3={3*3*3}' #不需要format()了
'1+2=3, 2^2=4, 3^3=27' #格式化字符串同理
>>> '{:010}'.format(-55)
'-000000055'
>>> f'{-55:010}'
'-000000055'>>> '{:,}'.format(1234567)
'1,234,567'
>>> F'{1234567:,}'
'1,234,567'
4. 在python3中,默认使用UTF-8 Unicode来进行编码,Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Python初学小知识(五):字符串相关推荐
- python金融分析小知识(30)——比较常见的pd.set_option的使用
Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 哈喽大家好,今天我要给大家讲讲在pandas的 ...
- python金融分析小知识(22)——时间序列之Timestamp对象的处理
Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 在我的这篇文章中我有介绍到时间序列中的Tims ...
- python金融分析小知识(12)——python爬虫工具xpath使用
Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 本篇文章紧接上一篇文章,python金融分析小 ...
- python 使用小知识总结(持续更新ing)
这篇博客主要针对于使用python来进行深度学习/机器学习过程各方面小知识的总结.习惯于使用C++这种严谨的语言,改换到python这门相对来说开放式的语言需要很多学习,而作为一个菜鸡,遇到编程问题解 ...
- python金融分析小知识(38)——Jupyter Notebook更改文件路径
Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 大家好,好久不见我又来啦!今天要给大家分享的小 ...
- Python每日小知识(2):字符串和编码
了解:ASCII编码(是1个字节)仍然可以完美滴处理数字,因为最早的时候只有127个字符编入计算机,但是遇到处理中文1个字节就有点捉襟见肘了,这时候我们就脑壳疼了,所以中国制定了GB2312编码,用来 ...
- 【Python小知识】字符串前加r、u、b、f是什么意思?
文章目录 Python 字符串前加r.u.b.f是什么意思? 总结 附: Python 字符串前加r.u.b.f是什么意思? 1.r表示raw string(原始字符串) 在普通字符串中,反斜线是转义 ...
- python小知识 --- f字符串保留小数
f-string 全称: 格式化字符串常量(formatted string literals) 引入: 是Python3.6 新引入的一种字符串格式化方法 PEP: 该方法源于PEP 498 – L ...
- python编程小知识_分享Python开发中要注意的十个小贴士
大家请注意:这篇文中假设我们都用的是Python 3 1. 列表推导式 你有一个list:bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子:[2, 4, 6, ...
最新文章
- 自定义的类型转换器中怎样自定义错误消息?(待解答)
- 程序员如何选择第二门语言
- php当前栏目位置,thinkphp获取栏目和文章当前位置的方法,_PHP教程
- 谈谈Javascript闭包
- 学python有哪些书推荐-有什么Python学习的书籍和学习资源推荐?
- (WPF)WPF要点之事件-深入浅出WPF笔记
- php pdo操作数据库
- 又~发现两篇好文章~~
- ospf与辅助接口实验
- centos7 php无法启动服务器,关于Centos7下Apache服务器php应用phpMyAdmin无法正常运行的问题...
- C#(数据结构):1.顺序表结构(3)
- Pandas库之DataFrame学习笔记
- 眼动数据分析基础_数据处理
- Delphi制作打印面签案例
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
- java中412是什么错_412错误是什么 412错误怎么解决
- 2021年中国存款余额持续增长,人民币、外币存款余额均创历史新高[图]
- 网上哪里打印资料便宜?
- python九宫格拼图,Python生成九宫格图片
- Linux虚拟机CentOS7挂机问题