【Python】Python学习笔记(六)字符串

本文详细介绍了Python中字符串的基本操作,包括使用索引读取字符,正负索引的使用,遍历字符串,以及分片操作。还讨论了如何搜索和比较字符串,使用成员运算符检查字符是否存在,以及enumerate函数的应用。此外,文章还涵盖了字符串的常用函数,如find、count、startswith和endswith等,以及拼接、分割、替换、删除、大小写转换等操作。
摘要由CSDN通过智能技术生成

字符串

基本操作

使用索引来读取字符串

Python允许使用正数或者负数来读取字符串中的某一个字符。
使用正数索引:

#按顺序打印输出字符串内的所有字符。

s = 'ABCDEFG'

print('s[0] = ', s[0])
print('s[1] = ', s[1])
print('s[2] = ', s[2])
print('s[3] = ', s[3])
print('s[4] = ', s[4])
print('s[5] = ', s[5])
print('s[6] = ', s[6])

使用负数索引时,注意最后一个字符串是-1,倒数第二个是-2,以此类推。

#按顺序打印输出字符串内的所有字符。

s = 'ABCDEFG'

print('s[-7] = ', s[-7])
print('s[-6] = ', s[-6])
print('s[-5] = ', s[-5])
print('s[-4] = ', s[-4])
print('s[-3] = ', s[-3])
print('s[-2] = ', s[-2])
print('s[-1] = ', s[-1])

使用索引遍历字符串

  • len函数可以获取字符串(列表等)的元素总数。
# 读取字符串后,使用for语句遍历其中所有字符串并输出。

s = input('字符串:')

for i in range(len(s)):
    print('s[{}] = {}'.format(i,s[i]))

实例:使用索引搜索字符串内的字符

下面是一个从字符串内寻找特定字符c的小例子。

# 从读取的字符串中搜索字符。

s = input('字符串s:')
c = input('查找的字符串c:')

print('字符{}'.format(c), end='')

for i in range(len(s)):
    if s[i] == c:
        print('在[{}]中。'.format(i))
        break
else:
    print('不存在。')

分片

分片的表达式如下:

s[i:j]    ->从s[i]到s[j-1]个字符
s[i:j:k]  ->从s[i]到s[j-1]每隔k个取出字符进行排列

其中i,j,k的含义如下:

  • 开始i:相当于取出范围内的第一个元素的索引。
  • 结束j:相当于取出范围内的最后一个元素的下一个元素的索引。
  • 步进k:去字符的间隔。

i,j,k所需要遵顼的一些规则:

  • 如果 i 和 j 大于len(s),则程序认为 i 和 j 等于len(s)。
  • i 被省略或为None时,程序认为 i 等于0。
  • j 被省略或为None时,程序认为 j 等于0。

一些实例如下:

例子含义
s[ : ]所有字符
s[ :n]开头的n个元素
s[i: ]s[i]开始到字符串末尾
s[-n:]最后n个元素
s[::k]每隔k-1个元素取出一个字符
s[::-1]反向取出所有字符

注意:字符串是不可变类型,所以s[5] = 'X'这种写法是错误的。

判断字符串的的大小关系

  • 可以使用比较运算符<,<=,>、>=、==、!=来判断字符串的大小关系和等价性。运算的结果是True或者False。判断时使用字典序进行判断。

此处需要注意,分别生成的字符串是不同的对象。

因此,会出现即使字符串中所有字符都相同,在使用is运算符的情况下,判断结果也为假

在这里插入图片描述

成员运算符

  • x in y:如果x是y的元素,则生成True,否则生成False。
  • x not in y:如果x不是y的元素,则生成True,否则生成False。
# 字符串txt是否包含字符串ptn

txt = input('字符串txt:')
ptn = input('字符串ptn:')

if ptn in txt:
    print('ptn属于txt。')
else:
    print('ptn不属于txt。')

使用enuerate函数遍历字符串

enuerate函数是一个内置函数,其可以承兑获取索引和元素。

# 使用enumerate函数遍历并输出字符串内的所有字符。

s = input('字符串:')

for i, ch in enumerate(s):
    print('s[{}] = {}'.format(i,ch))

令下标从1开始计数:

# 使用enumerate函数遍历并输出字符串内的所有字符(从1开始计数)

s = input('字符串:')

for i, ch in enumerate(s, 1):
    print('第{}个字符:{}'.format(i, ch))

反向遍历:

# 使用enumerate函数反向遍历并输出字符串内的所有字符

s = input('字符串:')

for i, ch in enumerate(reversed(s), 1):
    print('倒数第{}个字符是{}'.format(i, ch))

不使用索引遍历字符串

# 反向遍历并输出字符串内所有字符

s = input('字符串')

for ch in s[::-1]:
    print(ch, end='')

常用函数

搜索

find

str.find(sub[, start[, end]])

查看包含第一个sub字符串的位置。返回其中最小的索引值,若不存在则返回-1。

rfind

str.rfind(sub[, start[, end]])

查看包含的最后一个sub字符串的位置。返回其中最大的索引值,若不存在则返回-1。

index

str.index(sub[, start[, end]])

查看会包含的第一个sub字符串位置。返回其中最小的索引值,若不存在,抛出ValueError异常。

rindex

str.rindex(sub[, start[, end]])

查看包含的最后一个sub字符串的位置。返回其中最大的索引值,若不存在,抛出ValueError异常:

以下是一个小例子:

# 搜索字符串中包含的字符串

txt = input('字符串txt:')
ptn = input('字符串ptn:')

try:
    print('ptn存在于txt[{}]'.format(txt.index(ptn)))
except ValueError:
    print('ptr不存在于txt内')

count

str.count(sub[, start[, end]])

查找字符串内包含了几个sub。返回不重叠出现的次数。

startswith

str.startswith(prefix[, start[, end]])

判断字符串是否以prefix开始。是则返回True,不是则返回False。

endswith

str.endswith(suffix[, start[, end]])

判断字符串是否以suffix结束。是则返回True,不是则返回False。

下面是一个小实例:

# 搜索字符串中包含的字符串

txt = input('字符串txt:')
ptr = input('字符串ptr:')

c = txt.count(ptr)

if c == 0:
    print('txt不包含ptr。')
elif c == 1:
    print('txt包含ptn索引为:', txt.find(ptr))
else:
    print('txt包含的第一个ptr的位置是:', txt.find(ptr), sep='')
    print('txt包含的最后一个ptr的位置是:', txt.rfind(ptr), sep='')

拼接字符串

str.join(iterable)
分隔用字符.join(存储待拼接字符的可迭代对象)

一般来说,使用join方法比使用+或者+=的拼接速度更快。

分割字符串

str.split(sep=None, maxsplit=-1)

使用sep字符串分割字符串str,程序返回由分割后的字符串抽成的列表,如果没有设定sep,程序则以连续的空白字符作为分隔符。maxseplit参数表示分割的次数,如果设定为-1或者不设定,则程序不限制分割次数。

替换字符串

str.replace(old, new[, count])

replace方法会复制字符串并将字符串old全部替换为new,然后返回新的字符串。如果指定count参数,程序就会从前往后替换count次old。count参数可以省略。

删除字符串

str.strip([chars])

strip方法可以删除字符串头尾的chars字符串并返回新字符串。如果chars省略火为None,则删除字符串头尾的空格。

大小写转换

capitalize

str.capitalize()

将字符串首字符转换为大写字母,其余转换为小写字母,然后复制并返回新的字符串。

lower

str.lower()

将字符串中存在大小写区别的字母全部转换为小写字母,然后复制并返回新的字符串。

swapcase

str.swapcase()

将字符串中的大写字母转换为小写字母,小写字母转换为大写字母,复制并返回新的字符串。

title

str.title()

将字符串中的每一个单词的首字母转换为大写字母,其余存在大小写区别的字母转换为小写字母,然后复制并返回新的字符串。

upper

str.upper()

将字符串中存在大小写区别的字母全部转换为大写字母,然后复制并返回新的字符串。

判断字类别

str.isalnum()		# 是否为isalpha、isdecimal、isnumeric这种的一种
str.isalpha()		# 是否为英语字符
str.isascii()		# 是否ASCII字符
str.isdecimal()		# 是否为十进制数
str.isdigit()		# 是否为数字
str.isidentifier()	# 是否作为有效的标识符
str.islower()		# 是否为小写字符
str.isnumeric()		# 是否为数字
str.isprintable()	# 是否为可打印字符
str.isspace()		# 是否为空白字符
str.istitle()		# 首字母是否大写
str.isupper()		# 是否为大写字母

对齐字符串

center

str.center(width[, fillchar])

返回一个居中且使用fillchar填充(省略时使用空格填充)到width长度的字符串。

ljust

str.ljust(width[, fillchar])

返回一个左对齐且使用fillchar填充(省略时使用空格填充)到width长度的字符串。

rjust

str.rjust(width[, fillchar])

返回一个右对齐且使用fillchar填充(省略时使用空格填充)到width长度的字符串。

格式化

Python的格式化有三种:格式化运算符%、format方法、f字符串。
三种格式化方法其实大差不差,与cpp基本无异。

格式化字符串%

# 使用格式化运算符#进行格式化操作

a, b, n = 12, 35, 163
f1, f2 = 3.14, 1.23456789
s1, s2 = 'ABC', 'XYZ'

print('n的十进制表示是=%d。' % n)
print('n用十六进制表示=%o。' % n)
print('%d用八进制表示为%o用十六进制表示为%x。' % (n, n, n))

print('n为%5df1为%9.5ff2为%9.5f。' % (n, f1, f2))

print('"%s"+"%s"等于"%s"。' % (s1, s2, s1 + s2))

print('%d与%d的和为%d。' % (a, b, a+b))

print('%(no1)d+%(no2)d和%(no2)d+%(no1)d都等于%(sum)d。' %
        {'no1':a, 'no2':b, 'sum': a + b})

在这里插入图片描述

f字符串

# 使用f字符串进行格式化(打印输出生成的字符串)

a = int(input('整数a:'))
b = int(input('整数b:'))
c = int(input('整数c:'))
n = int(input('整数n:'))
f1 = float(input('实数f1:'))
f2 = float(input('实数f2:'))
s = input('字符串s:')
print()

print(f'a / b = {a / b}')
print(f'a % b = {a % b}')
print(f'a // b = {a // b}')
print(f'b是a的{a / b:%}')     # 百分率
print()
print(f'     a    b    c')
print(f'[+]{a:+5}{b:+5}{c:+5}')  # '+' '-'
print(f'[-]{a:-5}{b:-5}{c:-5}')  #     '-'
print(f'[ ]{a: 5}{b: 5}{c: 5}')  # ' ' '-'
print()
print(f'{c:<12}')  # 左对齐
print(f'{c:>12}')  # 右对齐
print(f'{c:^12}')  # 居中
print(f'{c:=12}')  # 在符号后填充字符
print()
print(f'n = {n:4}') # 至少四位
print(f'n = {n:6}') # 至少六位
print(f'n = {n:8}') # 至少八位
print(f'n = {n:,}') # 每3位插入一个,
print()
print(f'n = ({n:b})2')  # 二进制数
print(f'n = ({n:o})8')  # 八进制数
print(f'n = ({n})10')   # 十进制数
print(f'n = ({n:x})16') # 十六进制数(小写字母)
print(f'n = ({n:X})16') # 十六进制数(大写字母)
print()
print(f'f1 = {f1:e}')   # 指数形式
print(f'f1 = {f1:f}')   # 固定小数点形式
print(f'f1 = {f1:g}')   # 自动判断格式
print()
print(f'f1 = {f1:.7f}')  # 精度为7
print(f'f1 = {f1:12f}')  # 总位数为12
print(f'f1 = {f1:12.7}') # 总位数为12且精度为7
print()
print(f'f2 = {f2:.0f}')  #如果没有小数部分则省略
print(f'f2 = {f2:#.0f}') #即使没有小鼠部分也保留小数点
print()
print(f'{s:*<12}')  # 左对齐
print(f'{s:*>12}')  # 右对齐
print(f'{s:*^12}')  # 居中
print()

for i in range(65, 91):
    print(f'{i:c}', end='')
print()

在这里插入图片描述
格式化这里平常多用用,不会的查两次csdn或者书本就熟悉常用的啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两米长弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值