字符串
基本操作
使用索引来读取字符串
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或者书本就熟悉常用的啦~