Python字符串操作

一、索引

索引即下标,字符串中的每个字符都有其对应的索引,索引从0开始。我们可以通过索引定位到字符串中的某个字符。

name = "ark"  # 每个字母都是一个元素
# 0 1 2       正序索引
# -3 -2 -1    逆序索引
a = name[1]
b = name[-3]
print("a:" + a)
print("b:" + b)

从左至右的索引从0开始,如第一个print输出的结果是a:r。负数索引要从右至左,最左边是-1,如第二个print输出的结果是b:a

二、切片

切片是对字符串进行裁剪的操作,操作符是[],有以下几个特点:

1、顾头不顾尾 name[起始位置:终止位置]
也就是说它取的区间是左闭右开区间。

name = "today is good"
print("name[0:2] " + name[0:2])

由于是左闭右开区间,所以print输出的结果是name[0:2] to

2、某个位置不指定的时候默认取最后或最前

name = "today is good"
print("name[2:] " + name[2:])
print("name[:5] " + name[:5])
print("name[:] " + name[:])

第一个print会输出name[2:] day is good,因为[]的第二个索引没有写,所以直接取到最后;
第二个print会输出name[:5] today,因为[]的第一个索引没有写,所以直接从0取到5(不包含5);
第三个print会输出name[:] today is good,当[]的两个索引值都没有写的时候,直接取整个字符串,相对于没有进行切片。

3、索引为负数的情况

name = "today is good"
print("name[1:-1] " + name[1:-1])
print("name[:-1] " + name[:-1])
print("name[-2:1] " + name[-2:1])
print("name[-2:-5] " + name[-2:-5])
print("name[-4:-2] " + name[-4:-2])

前面提到过,索引为负数时要从右往左,最右边的字符索引是-1,因此第一个print输出的结果应该是name[1:-1] oday is goo,因为1就是从左往右的第二个字符(索引从0开始),而-1是从右往左的第一个字符;
第二个print的结果是name[:-1] today is goo,和上面一样,只不过第一个位置的索引没有指定,索引直接从0开始;
第三个print的结果是name[-2:1] ,也就是为空,为什么会为空呢?因为字符串的切片必须是[]中的第一个位置的索引要比第二个位置的索引要小(位置上),现在第一个位置的索引是-2,对应倒数第二个字符o,而第二个位置的索引是1,对应第二个字符o,所以截取不到,返回空;
第四个print的结果是name[-2:-5] ,也是空,原理是上面一样;
第五个print的结果是name[-4:-2] go,也就是从右往左数第4个截取到第2个(不包括第2个)。

4、三个参数的情况 name[起始位置:终止位置:步长]
步长意味着隔几个字符取一个,步长默认为1,当步长为负数时反着截取。

name = "today is good"
print("name[0:5:1] " + name[0:5:1])
print("name[0:5:2] " + name[0:5:2])
print("name[2:5:-1] " + name[2:5:-1])
print("name[-2:5:-1] " + name[-2:5:-1])
print("name[-2:-5:-1] " + name[-2:-5:-1])

第一个print的结果是name[0:5:1] today,这里可能会觉得奇怪,步长为1不是应该隔一个字符取一个字符吗?为什么还是取到了完整的字符串呢?注意步长为n时,是隔n-1个字符取一个,默认是步长就是1,因此会连续截取;
第二个print的结果是name[0:5:2] tdy,这次步长是2,也就是隔2-1=1个字符取一个。
第三个print的结果是name[2:5:-1] ,结果为空,这里明明符合我们上一条说的[]中的第一个位置的索引要比第二个位置的索引要小,为什么会截取为空呢?因为这里的步长是负数,当步长为负数时,这条规则就会反过来,也就是[]中的第一个位置的索引要比第二个位置的索引要大(位置上),否则将截取不到值;
第四个print的结果是name[-2:5:-1] oog si,此时步长是-1,第一个位置的索引是-2,对应倒数第二个字符o,第二个位置的索引是5,对应第五个字符空格,符合第一个位置的索引要比第二个位置的索引要大,所以能够进行截取,步长为负数时是反着截取,也就是从索引为-2的位置开始截取到索引为5的位置(不包括5);
第五个print的结果是name[-2:-5:-1] oog,原理同上。

5、切片的时候起始位置和终止位置都超出的时候不会进行报错

name = "today is good"
print("name[100:400] " + name[100:400])
print("name[1:600]" + name[1:600])
print("name[-100:5] " + name[-100:5])

第一个print,两边都超出了范围,不会报错,输出为空;
第二个print,右边超出范围,不会报错,从索引为1的位置截取到最后;
第三个print输出name[-100:5] today,左边超出范围,不会报错,从索引为0的位置截取到5的位置(不包括5)。

下面是一些练习,可以先自己预测一下输出结果,再去运行一遍检查是否正确。

name = "你好,这里是绿洲。"
print("name[-6:6] " + name[-6:6])
print("name[::2] " + name[::2])
print("name[100:500] " + name[100:500])
print("name[1:500]" + name[1:500])
print("name[-100:5] " + name[-100:5])

name = "python is best"
print("获取name中后3个字符:" + name[-3:])
print("获取name中第1,3,5个字符:" + name[0:6:2])
print("获取name中第2,4,6个字符:" + name[1:7:2])
print("获取name中第4个到最后一个,每2个取一个:" + name[3::2])
print("获取name中倒数第5个到最开始,每3个取一个:" + name[-5::-3])
三、大小写转换

python的大小写转换主要涉及两个函数:upper()和lower():
upper():将字符串中的字母全部转换成大写;
lower():将字符串中的字母全部转换成小写。

s = "ark"
s1 = s.upper()
print(s1)

s = "ARK"
s2 = s.lower()
print(s2)
四、以…开头或以…结尾

主要涉及到两个函数:startswith()和endswith():
startswith():判断字符串是否以某个字符串开头,返回一个布尔值;
endswith():判断字符串是否以某个字符串结尾,返回一个布尔值。

s = "alex"
s1 = s.startswith("e")  # 是否以e开头,返回false
print("s1:" + str(s1))
s2 = s.startswith("e", 2)  # 从下标为2的字符串开始,是否以e开头,返回true
print("s2:" + str(s2))

s1 = s.endswith("x")  # 是否以x结尾,返回true
print("s1:" + str(s1))
s2 = s.endswith("e", 0, 2)  # 下标为0~2的字符串中,是否以e结尾,返回false
print("s2:" + str(s2))

当带两个参数时,第二个参数代表从索引为2位置的字符开始的字符串去匹配。
当带三个参数时,第二个参数代表索引开始位置,第三个参数代表索引结束位置,注意这里也是左闭右开区间。

五、常用方法

1、maketrans() 用来生成字符映射表
translate() 用来根据映射表中定义的映射关系转换字符串并替换其中的字符

table = ''.maketrans('abcdefg', '1234567')  # 两个字符串中的字符是一一对应的,不是两个字符串整体对应
s = 'ahhhbiiicoood'

2、strip() 删除字符串两边的空白字符/指定字符
rstrip() 删除字符串右边的空白字符/指定字符
lstrip() 删除字符串左边的空白字符/指定字符

s = '  a b c   '
print(s.strip())
print(s.rstrip())
print(s.lstrip())

s = 'aaabbbaaacccaaa'
print(s.strip('a'))  # 删除两端指定字符
print(s.rstrip('a'))
print(s.lstrip('a'))

s = 'abcdasdfwg'
print(s.strip('abce'))  # 这三个方法的参数字符串不是作为整体来看待的,而是多个字符,只要两端出现了这个字符串中的字符就会被删掉

3、center() 、ljust()、rjust():返回指定宽度的新字符串,原字符串居中、左对齐或右对齐,如果指定宽度大于字符串长度,使用指定字符(默认空格)进行填充,如果指定宽度小于等于字符串长度,则返回原字符串。

s = '123123'
print(s.center(5))
print(s.center(20))
print(s.rjust(20, '='))
print(s.ljust(20, '.'))

4、对字符串内容的判断方法
isalnum() 判断字符串是否是数字或字母(全部是数字或字母才返回true)
isalpha() 判断字符串是否是字母(全部是字母才返回true)
isdigit() 判断字符串是否是数字(全部是数字才返回true)
isdecimal() 检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
isnumeric() 检测字符串是否只由数字组成。这种方法是只针对unicode对象。注:定义一个字符串为Unicode,只需要在字符串前添加 ‘u’ 前缀即可。
isspace() 判断字符串是否是空字符(全部是空字符才返回true)
isupper() 判断字符串是否是大写字母(全部是大写字母才返回true)
islower() 判断字符串是否是小写字母(全部是小写字母才返回true)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值