轻松熊喵喵个人笔记 -- Python字符串(下)


字符串切片 slice 操作

  切片 slice 操作可以让我们快速的提取子字符串。标准格式为:
  [起始偏移量 start:终止偏移量 end:步长 step]

  典型操作(三个量为正数的情况)如下:
在这里插入图片描述
其他操作(三个量为负数)的情况:
在这里插入图片描述

  切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于 0 则会当做 0,终止偏移量大于“长度-1”会被当成-1。例如:

>>> "abcdefg"[3:50]
'defg' 

  我们发现正常输出了结果,没有报错。

【操作】

  1. 将”to be or not to be”字符串倒序输出
  2. 将”sxtsxtsxtsxtsxt”字符串中所有的 s 输出

split()分割和 join()合并

  split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下:

>>> a = "to be or not to be" >>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']

  join()的作用和 split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下:

>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'

拼接字符串要点:
  使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

【操作】测试+拼接符和 join(),不同的效率 (mypy_07.py)

import time
time01 = time.time() #起始时刻
a = ""
for i in range(1000000):
a += "sxt"
time02 = time.time() #终止时刻
print("运算时间:"+str(time02-time01))
time03 = time.time() #起始时刻
li = []
for i in range(1000000):
li.append("sxt")
a = "".join(li)
time04 = time.time() #终止时刻
print("运算时间:"+str(time04-time03))

字符串驻留机制和字符串比较

字符串驻留:
  仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制驻留机制。

>>> a = "abd_33" >>> b = "abd_33" >>> a is b
True
>>> c = "dd#" >>> d = "dd#" >>> c is d
False
>>> str1 = "aa" >>> str2 = "bb" >>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb" True

字符串比较和同一性

  我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符。

  我们使用 is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是否和 id(obj2)相等。


成员操作符

  in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。


字符串常用方法汇总

  字符串有很多常用的方法,我们需要熟悉。我们通过表格将这些方法汇总起来,方便大家查阅。希望大家针对每个方法都做一次测试。


常用查找方法

我们以一段文本作为测试:

  a=’’‘我是轻松熊,今年 3 岁了。我有个队友叫喵熊,她也 3 岁了。我喜欢打网球,喵熊也喜欢打网球,希望她将来能够打败我’’
在这里插入图片描述


去除首尾信息

  我们可以通过 strip()去除字符串首尾指定信息。通过 lstrip()去除字符串左边指定信息,rstrip()去除字符串右边指定信息。

【操作】去除字符串首尾信息

>>> "*q*s*x*".strip("*")
'q*s*x' >>> "*q*s*x*".lstrip("*")
'q*s*x*' >>> "*q*s*x*".rstrip("*")
'*q*s*x' >>> " qsx ".strip()
'qsx' 

大小写转换

  编程中关于字符串大小写转换的情况,经常遇到。我们将相关方法汇总到这里。为了方便学习,先设定一个测试变量:
     a = “icebear love programming, love SPORT”
在这里插入图片描述


格式排版

  center()、ljust()、rjust()这三个函数用于对字符串实现排版。示例如下:

>>> a="QSX" >>> a.center(10,"*")
'***QSX****' >>> a.center(10)
' QSX ' >>> a.ljust(10,"*")
'QSX*******' 

其他方法

  1. isalnum() 是否为字母或数字
  2. isalpha() 检测字符串是否只由字母组成(含汉字)。
  3. isdigit() 检测字符串是否只由数字组成。
  4. isspace() 检测是否为空白符
  5. isupper() 是否为大写字母
  6. islower() 是否为小写字母
>>> "qsx100".isalnum()
True
>>> "qsx 轻松熊".isalpha()
True
>>> "234.3".isdigit()
False
>>> "23423".isdigit()
True
>>> "aB".isupper()
False
>>> "A".isupper()
True
>>> "\t\n".isspace()
True

字符串的格式化

format()基本用法

  Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

  基本语法是通过 {} 和 : 来代替以前的 % 。

  format 函数可以接受不限个参数,位置可以不按顺序。

  我们通过示例进行格式化的学习。

>>> a = "名字是:{0},年龄是:{1}" 
>>>> a.format("轻松熊",18)
'名字是:轻松熊,年龄是:18' 
>>> a.format("喵熊",3)
'名字是:喵熊,年龄是:3' 

>>> b = "名字是:{0},年龄是{1}。{0}是个好小伙"
>>> b.format("轻松熊",18)
'名字是:轻松熊,年龄是 18。高淇是个好小伙' 
>>> c = "名字是{name},年龄是{age}" 
>>> c.format(age=19,name='轻松熊')
'名字是轻松熊,年龄是 19' 

  我们可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化,非常方便。


填充与对齐

  填充常跟对齐一起使用
  ^、<、>分别是居中、左对齐、右对齐,后面带宽度
  :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

>>> "{:*>8}".format("245")
'*****245' >>> "我是{0},我喜欢数字{1:*^8}".format("轻松熊","666")
'我是轻松熊,我喜欢数字**666***' 

数字格式化

  浮点数通过 f,整数通过 d 进行需要的格式化。案例如下:

>>> a = "我是{0},我的存款有{1:.2f}" >>> a.format("轻松熊",3888.234342)
'我是轻松熊,我的存款有 3888.23' 

  其他格式,供大家参考:
在这里插入图片描述


可变字符串

  在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,智能创建新的字符串对象。但是,经常我们确实需要原地修改字符串,可以使用 io.StringIO
对象或 array 模块。

>>> import io
>>> s = "hello, qsx" 
>>> sio = io.StringIO(s)
>>> sio
<_io.StringIO object at 0x02F462B0>
>>> sio.getvalue()
'hello, qsx' 
>>> sio.seek(7)
7
>>> sio.write("g")
1
>>> sio.getvalue()
'hello, gsx' 

作业

  1. 从控制台输入用户的月薪,进行运算计算出年薪。打印输出用户的年薪.

  2. 使用字符串复制,用计算机打印出“爱你一百遍”,打印 100 次,将”to be or not to be”字符串倒序输出。

  3. 将”qsxqsxqsxqsx”字符串中所有的 s 输出。

  4. 判断如下输出结果,并文字解释原因:

>>> a = "abd_33" 
>>> b = "abd_33"
>>> c = "dd#" 
>>> d = "dd#" 
>>> a is b #输出 true or false?
>>> c is d #输出 true or false?
  1. 写出如下代码打印的结果:
>>> c = "名字是{name},年龄是{age}" 
>>> c.format(age=19,name=''轻松熊")

参考:百战尚学堂 – 高淇老师

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值