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初学小知识(五):字符串相关推荐

  1. python金融分析小知识(30)——比较常见的pd.set_option的使用

    Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 哈喽大家好,今天我要给大家讲讲在pandas的 ...

  2. python金融分析小知识(22)——时间序列之Timestamp对象的处理

    Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 在我的这篇文章中我有介绍到时间序列中的Tims ...

  3. python金融分析小知识(12)——python爬虫工具xpath使用

    Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 本篇文章紧接上一篇文章,python金融分析小 ...

  4. python 使用小知识总结(持续更新ing)

    这篇博客主要针对于使用python来进行深度学习/机器学习过程各方面小知识的总结.习惯于使用C++这种严谨的语言,改换到python这门相对来说开放式的语言需要很多学习,而作为一个菜鸡,遇到编程问题解 ...

  5. python金融分析小知识(38)——Jupyter Notebook更改文件路径

    Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 大家好,好久不见我又来啦!今天要给大家分享的小 ...

  6. Python每日小知识(2):字符串和编码

    了解:ASCII编码(是1个字节)仍然可以完美滴处理数字,因为最早的时候只有127个字符编入计算机,但是遇到处理中文1个字节就有点捉襟见肘了,这时候我们就脑壳疼了,所以中国制定了GB2312编码,用来 ...

  7. 【Python小知识】字符串前加r、u、b、f是什么意思?

    文章目录 Python 字符串前加r.u.b.f是什么意思? 总结 附: Python 字符串前加r.u.b.f是什么意思? 1.r表示raw string(原始字符串) 在普通字符串中,反斜线是转义 ...

  8. python小知识 --- f字符串保留小数

    f-string 全称: 格式化字符串常量(formatted string literals) 引入: 是Python3.6 新引入的一种字符串格式化方法 PEP: 该方法源于PEP 498 – L ...

  9. python编程小知识_分享Python开发中要注意的十个小贴士

    大家请注意:这篇文中假设我们都用的是Python 3 1. 列表推导式 你有一个list:bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子:[2, 4, 6, ...

最新文章

  1. 自定义的类型转换器中怎样自定义错误消息?(待解答)
  2. 程序员如何选择第二门语言
  3. php当前栏目位置,thinkphp获取栏目和文章当前位置的方法,_PHP教程
  4. 谈谈Javascript闭包
  5. 学python有哪些书推荐-有什么Python学习的书籍和学习资源推荐?
  6. (WPF)WPF要点之事件-深入浅出WPF笔记
  7. php pdo操作数据库
  8. 又~发现两篇好文章~~
  9. ospf与辅助接口实验
  10. centos7 php无法启动服务器,关于Centos7下Apache服务器php应用phpMyAdmin无法正常运行的问题...
  11. C#(数据结构):1.顺序表结构(3)
  12. Pandas库之DataFrame学习笔记
  13. 眼动数据分析基础_数据处理
  14. Delphi制作打印面签案例
  15. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
  16. java中412是什么错_412错误是什么 412错误怎么解决
  17. 2021年中国存款余额持续增长,人民币、外币存款余额均创历史新高[图]
  18. 网上哪里打印资料便宜?
  19. python九宫格拼图,Python生成九宫格图片
  20. Linux虚拟机CentOS7挂机问题

热门文章

  1. snntorch:P2—【LIF神经元模型】手撕公式、代码实现与演示
  2. 虚拟机ping不通本地_虚拟机ping不通主机怎么解决
  3. 悉尼JSConf Downunder
  4. 互联网业务:得屌丝者得天下!
  5. 插入移动硬盘,显示需要格式化
  6. eclipse采用第三方模拟器BlueStack…
  7. 古代名句精选 version 2
  8. 德国大学生发明手机安全气囊 再不用担心碎屏啦!
  9. java--spring5之spring实现jdbc增删改查----4
  10. 【HCIP】第十五天