字符串的操作

字符串的操作

字符串的定义

字符串可以有三种定义方式

单引号

str1 = 'hello world!!!'
 # <class 'str'>

双引号

str2 = "hello python"
 # <class 'str'>

三引号

str3 = '''hello bigdata''' 
str4 = """hello china"""  
# <class 'str'>

总结

#多引号的字符串可以在引号内部换行

#单引号的字符串想要换行需要自己添加转义字符 \n  \t   等

字符串的索引

将所有字符依次存入字符串所在空间,并且按照顺序将元素依次存放, 为了方便存取数据,我们讲元素进行编号,从0开始依次递增
# 通过下标索引,可以获取元素,或者进行切片等操作

切片索引

切片逻辑
# 起始位置: 字符串切片的起点(包含)
# 结束位置:字符串切片的终点(不包含)
# 在开发中绝大多数范围区间是左闭右开区间,其余内容单独记忆(例如 randint是一个闭区间)
# 步长:步长就是每一次查找数据的间隔(相邻两个索引的差值就是步长)

字符串反转 str[::-1]

复制 str1 = str2[:]

开头

省略开头代表从头开始

# 从开头,一直到指定的结束位置,来取指定步长的数据
# 起始位置也可以省略
#步长为正数,则起始位置为字符串开始
#步长为负数,则起始位置为字符串末尾

sequence[:19:2]  # 以步长2取元素,提取奇数索引位置的元素

结尾

省略结尾表示取到结尾

sequence[2::1] 

步长

省略步长代表一个一个取,正数往后取,负数往前取

# 从指定的开头取到指定的结尾,步长默认为一
# 步长为正数,则结束位置为字符串末尾
# 步长为负数,则结束位置为字符串开始

省略开头和结尾

sequence[:3]  # 提取前3个元素   如果只剩余步长则代表取多少个元素
print(a[::2])  # 步长为2
print(a[::-1])  # 倒着取
print(a[::1])  # 正着取

字符串的查找

字符串的查找 需要用到python的函数 .find() .rfind() .count()

index

index
# 格式: 字符串.index(self(不用传值), sub(子字符串), start(起始位置), end(结束位置))
返回指定范围内的从左至右的第一个查找到的子字符串位置索引
找不到对应的子字符串,则会报错,如果能够查找到数据返回当前子字符串的正数索引
# 指定查找范围是左闭右开区间


text = "Hello, World!"

# 查找子字符串 "World" 的索引
index1 = text.index("World")
print("第一个出现的索引:", index1)

# 在指定的范围内查找子字符串 "o" 的索引
index2 = text.index("o", 5, 10)
print("在指定范围内的索引:", index2)

# 查找不存在的子字符串会引发 ValueError 异常
try:
    index3 = text.index("Python")
except ValueError as e:
    print("子字符串不存在:", e)

find

string.find(substring, start, end)

find
# 格式: 字符串.find(self(不用传值), sub(子字符串), start(起始位置), end(结束位置))
返回指定范围内的从左至右的第一个查找到的子字符串位置索引
# 结论:使用find进行查询时,如果查询的子字符串不存在,则返回-1,如果存在则返回指定正数索引
# find的查询范围是左闭右开区间
# 要查询的子字符串可以是单个字符可以是多个字符

rfind

string.rfind(substring, start, end)

string 是要搜索的原始字符串。

substring 是要查找的子字符串。

start 是可选参数,指定搜索的起始位置(默认为0)。

end 是可选参数,指定搜索的结束位置(默认为整个字符串的长度)。

rfind
和find使用方式完全相同,只是在查询时,从右至左查询,返回第一次查询到的字符索引,返回的依然是正数索引
# index 和 find 使用方法完全一致,只是,index 在查询不到子字符串时会报错,find会返回-1


text = "Hello, World! Hello, Python!"

# 从右向左查找子字符串 "Hello" 的索引
index1 = text.rfind("Hello")
print("最后一个出现的索引:", index1)

# 在指定的范围内从右向左查找子字符串 "o" 的索引
index2 = text.rfind("o", 0, 10)
print("在指定范围内的索引:", index2)

# 查找不存在的子字符串返回 -1
index3 = text.rfind("Java")
print("不存在的子字符串索引:", index3)

rfind() 函数返回找到的子字符串的最后一个字符的索引,如果子字符串不存在,则返回 -1。

如果指定了 startend 参数,rfind() 函数将在指定范围内从右向左搜索子字符串。

find() 不同,rfind() 也不会引发异常,而是返回 -1。这使得它在需要检查子字符串是否存在并找到最后一个出现位置时非常有用。

rfind() 函数是一个有用的字符串操作,特别是当你需要查找最后一个出现的子字符串时。

count

count() 计数
使用count 可以返回当前子字符串在指定字符串中出现的次数
# 提示:在大多数编程语言中,  计数从1开始数,  索引或编号,从0开始编号
# 格式: 字符串.count(self(不用传值, x(要查询个数的子字符串), start(开始位置), end(结束位置)))
# 结论:1.count查询的范围是一个左闭右开区间
#     2.如果没有查询到子字符串则返回0  不会报错

字符串的修改

字符串的替换

要进行字符串替换需要python中的 replace()函数

replace(self(不用传值)(可以省略), old(旧值), new(新值), count(替换次数))
print(str1.replace('o', '$', 1)) 

如果不指定替换次数,默认将所有的指定字符全部替换 替换次数超过存在的字符也不会报错

调用该函数的时候是产生新的数据而不是在原有数据上修改

字符串的分割与合并

split()分割 join()合并 +合并 += 加赋值

分割

# split 会按照指定分隔符进行拆分,拆分完成后 会将所有的拆分后的结果以字符串形式保存到列表中
# split(self(不用传值), sep(分隔符), maxsplit(最大分割次数))
# 使用谁作为分隔符,则拆分后该分隔符消失,
# 最大拆分次数如果超过可以拆分的上限,则保持拆分上线即可,不会报错

合并

join

容器中的元素必须是字符串,容器内的元素会被直接迭代后添加

“123” “1” “ 2” “3”

+赋值

字符串大小写转换

第一个字母大写

capitalize 字符串第一个字母大写,其余小写,对汉字,数字不做处理

所有单词首字母大写

title 对所有的单词的首字母大写,其于小写

全部大写

upper 将数据全部变成大写

全部小写

lower 将字符全部变成小写

字符串两边指定字符删除

strip()函数 去除字符串左右两侧指定字符

# strip中如果不传参数,则去除字符串左右两侧的空白(包括空格,换行,制表位等)
格式:字符串.strip(self(不传值), chars(可以传一个字符或多个字符))
传入多个字符时,和传入的顺序没有任何关系,只要是传入的字符就不能出现在指定字符串左右两侧,直到出现不属于其内容的字符删除才会结束
# rstrip 删除字符串右侧指定的字符
# lstrip 删除字符串左侧指定的字符
# strip, lstrip, rstrip 只能接收str类型参数或者None

字符串对齐

rjust 右对齐 (字符在右侧)
# 格式:字符串.rjust(self(不用传值), width(字符宽度), fillchar(填充字符))

如果不指定填充字符,则自动用空格补齐

ljust 左对齐
 和rjust使用方式一致,只不过字符在左侧
# center 居中对齐
格式: center(self(不用传值), width(字符宽度), fillchar(填充字符))

字符串判断

 startswith 判断是否以...开头    # 结果是布尔值
endswith 判断是否以...结尾
 is 判断
 isalnum 判断是否全部为数字或字母  不能有空格
 isspace  判断是否全部为空格
isnumeric  isdecimal isdigit  都是判断是否为数字的
 isidentifier判断是否为标识符
isalpha 判断是否全部为字母		# 默认将中文当做字母来看

两个字符串比较是否相等

两个字符串必须长度和内容顺序都一模一样

a = "1233"      
b = "1322"      
c = "1233"      
d = '1234'      
                
print(a == b)   # 内容一样,顺序不一样
print(a == c)   # 内容,顺序都一样
print(a == d)   # 数据长度一样, 内容不一样
print(b == c) 


# 运行结果
False
True
False
False

两个字符串比较大小

比较第一队不相等元素的大小,大小由编码值决定

字母小写最大, 数字值越大编码越大

a = "1233"              
b = "1322"              
print(a >= b)           

# 一相等 3的编码大于2

# 运行结果   
False

字符串的操作

ord

获取指定数据的编码值

print(ord("A"))   

# 运行结果
65

eval

在这里插入图片描述

去掉字符串外面的引号,里面的内容必须是合法内容

chr

将对应的编码值转换为字母

a = 90             
print(chr(a))      

# 运行结果
Z

案例:

判断某个变量中的数据是否是中文

def contains_chinese(input_string):
    for char in input_string:
        if '\u4e00' <= char <= '\u9fff':
            return True
    return False

提取所有中文

def extract_chinese(input_string):
    chinese_characters = ""

    for char in input_string:
        if '\u4e00' <= char <= '\u9fff':
            chinese_characters += char

    return chinese_characters

字符串的格式化

字符串数据使用 %s
浮点型数据使用 %f
整型数据使用 %d

f{}类型格式化

f-string是Python3.6以后推出的格式化方式

# 格式:f'要输出的内容{变量}'
print(F'学员的姓名是{name}, 学员的年龄是{age}, 学员的身高是{height}, 学员的体重是{weight}, 学员的分数是{score}%%, 学员的学号是{id}')

print('学员的姓名是%s, 学员的年龄是%d, 学员的身高是%.2f, 学员的体重是%.3f, 学员的分数是%d%%, 学员的学号是%06d' % (name, age, height, weight, score, id))

{}.format

name = "Alice"                                 
age = 30                                       
print("My name is {} and I am {} years old.".fo
print("My name is {0} and I am {1} years old.".
# {}里面的数字是后面format传入的变量的位置索引  是为了防止变量传入过多引起混乱  

精度调整

a = “liang”
b = 100
c = 1.3

print(f"{c:.5f}")    # 小数的位数
print(f"{b:05d}")    # 整数的位数
print(f"{a:^07}")    # 7位数不足就往两边加0或这指定数据
print(f"{a:>07}")   # 口往哪里开, 零往哪里补
print(f"{a:<07}")  
小数
print(f"{浮点类型:.小数位数 f}")  
print(f"{c:.5f}")    # 小数的位数
# 控制小数的总宽度和精度
value = 123.456789
formatted_value = f"Value: {value:8.2f}"
print(formatted_value)

# 添加千位分隔符
number = 1000000
formatted_number = f"Number with commas: {number:,}"
formatted_number1 = f"Number with commas: {number:,.2f}"
print(formatted_number)
print(formatted_number1)

整数
print(f"{整数:补位数据  数据长度 d}")
print(f"{b:05d}")
# 基本整数格式化
num = 42
formatted_num = f"The answer is {num}"
print(formatted_num)

# 控制整数的总宽度
value = 12345
formatted_value = f"Value: {value:8}"
print(formatted_value)

# 添加千位分隔符
number = 1000000
formatted_number = f"Number with commas: {number:,}"
print(formatted_number)

# 使用十六进制、八进制或二进制表示整数
decimal_num = 42
hexadecimal_num = f"Hexadecimal: {decimal_num:x}"
octal_num = f"Octal: {decimal_num:o}"
binary_num = f"Binary: {decimal_num:b}"
print(hexadecimal_num)
print(octal_num)
print(binary_num)

字符串
print(f"{数据: 补位方向 补位数据  补位长度}")


< 表示左对齐,
> 表示右对齐,
^ 表示居中对齐。
在 : 后面可以指定总宽度,比如 :10 表示总宽度为10。
使用 0 可以指定用0来填充,例如 010 表示使用0填充,总宽度为10
案例:
# 口往哪里开, 零往哪里补
print(f"{a:^07}") 
print(f"{a:>07}")   
print(f"{a:<07}")

# 左对齐并在总宽度为10的空间内插入整数
num = 42
formatted_num = f"Number: {num:<10}"
print(formatted_num)

# 右对齐并在总宽度为10的空间内插入整数
num = 42
formatted_num = f"Number: {num:>10}"
print(formatted_num)

# 居中对齐并在总宽度为10的空间内插入整数
num = 42
formatted_num = f"Number: {num:^10}"
print(formatted_num)

# 使用0填充并在总宽度为10的空间内插入整数
num = 42
formatted_num = f"Number: {num:010}"
print(formatted_num)

%格式化(占位符)

格式化输出是字符串的功能,可以将字符串格式化之后赋值给变量后调用

格式: ‘字符串,占位符’ % 变量 格式化完成后,会将占位符位置填充上对应的变量

%[key] [flags] [width] [.precision] [length type]conversion type

不同数据类型的变量,要使用不同的占位符进行占位

%: 必须要有的符号。它标记占位符的开始。
key: 选填。映射的键,由带括号的字符序列组成,一般用于后面的values是是字典的场景。
flags: 选填。转换标志(Conversion flags), 会影响某些转换类型的结果。
width: 选填。最小字段宽度。如果指定为“*”(星号),则实际宽度从值中元组的下一个元素读取,要转换的对象位于最小字段宽度和可选精度之后。
precision: 选填。精度,写法为.precision(点+精度)。如果指定为“*”(星号),则实际宽度从值中元组的下一个元素读取,要转换的值位于精度之后。
length type: 选填。长度修改器。
Conversion type: 必须要有的符号。转换类型,也标记占位符的开始。

括号内的变量数量不能少于占位符数量

#  %s = 字符串
#  %d = 整数类型
#  %f = 浮点数(小数)
print("%s  %s  %s" % ("hello", 3, 3.1415))
print("%s  %d  %d" % ("hello", 3, 3.1415))
print("%s  %d  %f" % ("hello", 3, 3.1415))
print("%s  %d  %f" % ("hello", 3, 3.1415))
print('学员的姓名是%s, 学员的年龄是%d岁, 学员的身高是%f米, 学员的体重是%fkg, 学员的婚姻状况是%s' % (name, age, height, weight))
# %s 是一个十分通用的格式化方法,因为所有数据类型都能转化为str


# 设置精度
print('%f' % 3.14)
print('%.4f' % 3.14)
print("%(name)s  %(age)s" % {"name": "Lihua", "age": 20})  # 搭配字典使用,传入key获取 values

# 填充, 对其
print("--"*20, "liangyiwen", "--"*20)   
print("% d  %+d" % (1234, 1234))
print("% d  %+d" % (-1234, -1234))

print("--"*20, "liangyiwen", "--"*20)

# 设置最小占位宽度,默认右对齐,内容不够使用空格填充
print("%4d,%6d,%10f" % (12, 1234, 3.14))
""" "
%-4d":这部分是一个格式化字符串,它指定了一个整数的格式。
其中的 %d 表示要在这个位置插入一个整数值。
%-4d 中的 - 表示左对齐,4 表示总宽度为4个字符。
因此,这个占位符告诉 Python 在这个位置插入一个整数,并将其左对齐,并且总宽度为4个字符。
"""
print("%04d,%06d,%010f" % (12, 1234, 3.14))
print("%-4d,%-6d,%-10f" % (12, 1234, 3.14))
print("%-4d,%-6d,%-10f" % (12, 1234, 3.14))

结论:占位符的数量,与%后的变量数量必须保持一致,如果是一个占位符,则可以使用一个变量,如果是多个占位符,那么多个变量必须使用括号包裹起来

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值