算法题Python常用内置函数、方法、技巧汇总(其三:字符串)
文章目录
字符串相关操作
str类型转int类型
给定一个包含若干数字的字符串num_str,如何将其转换为int类型的num呢?最简单的方式是使用强制类型转换,即
num_str = "12345"
num = int(num_str)
如果不允许直接使用int(num_str),如何使用遍历的方式,将num_str转换成int类型的num呢?
可以初始化变量num为0,然后从左到右遍历num_str中的每一个字符ch,将num扩大十倍后将加上int(ch)的结果重新赋值给num,直到遍历结束。代码实现如下
num_str = "12345"
num = 0
for ch in num_str:
num = num * 10 + int(ch)
注意,该技巧通常用于处理数字字符和其他字符混杂的字符串,在诸多字符串解码相关的栈题和模拟题中出现,如LC394. 字符串解码、【栈】腾讯2020春招-压缩算法、【栈】2023Q1A-解压缩算法 等题目中经常使用。
判断字符串是否均为字母、数字、或者字母或数字
字符串中的isalpha()方法用以判断字符串中是否均为字母,isdigit()方法用以判断字符串中是否均为数字,isalnum()方法用以判断字符串中是否均为字母和数字,根据判断结果返回一个布尔类型。
s = "123abc"
print(s[-1].isalpha()) # True
print(s.isalpha()) # False
print(s[0].isdigit()) # True
print(s.isdigit()) # False
print(s.isalnum()) # True
由于isdigit()方法只能判断字符串是否均为数字,所以是不能够判断负数的,在使用该方法时要注意这个问题,以免错判。如以下代码无法达到我们的要求。
s = "-10"
print(s.isdigit()) # False
如果我们确定字符串不会存在数字和其他字符混搭的情况,我们可以只取字符串的最后一个元素进行判断。这在LeetCode 150、逆波兰表达式求值 中可以用到这个技巧。
s1 = "-10"
print(s1[-1].isdigit()) # True
s2 = "10"
print(s2[-1].isdigit()) # True
s3 = "+"
print(s3[-1].isdigit()) # False
判断字符串是否均为大写或小写字母
字符串中的islower()和isupper()方法用以判断字符串中是否均为小写字母或大写字母,根据判断结果返回一个布尔类型。注意当字符串中同时包含大小写字母,或包含数字或其他符号时,均会返回False。
s1 = "abc"
print(s1.islower()) # True
print(s1.isupper()) # False
s2 = "ABC"
print(s2.islower()) # False
print(s2.isupper()) # True
s3 = "aBC"
print(s3.islower()) # False
print(s3.isupper()) # False
s4 = "1"
print(s4.islower()) # False
print(s4.isupper()) # False
字母大小写转换
字符串中的lower()和upper()方法可以将字符串中的所有小写字母转化为大写,或者将所有大写字母转化为小写,并返回一个新的字符串,原字符串不发生改变。
s = "aBc123"
s_upper = s.upper() # 得到"ABC123"
s_lower = s.lower() # 得到"abc123"
字符串中的title()方法可以令字符串中的所有单词的首字母大写,并返回一个新的字符串,原字符串不发生改变。这个方法的使用频率较低。
s = "i love python"
s_title = s.title() # 得到"I Love python"
替换
字符串中的replace(x, y)方法可以将原字符串中的字符串x替换为字符串y,并返回一个新的字符串,原字符串不发生改变。
s = "aBc123"
s1 = s.replace("a", "d")
s2 = s.replace("123", "4")
在OD真题【栈】2023B-仿LISP运算 中对输入的字符串进行预处理的操作,就用到了replace()方法,将单个左括号"("和右括号")"替换成前后带有空格的左括号" ( "和右括号" ) ",方便后续的分割操作。
分割
字符串中的split(x)方法以字符串x为分割符,将原字符串分割为一个新的列表并返回,原字符串不发生改变。如果不传入参数x,则默认为按照空格" "进行分割。最常用的分隔符为空格" "或者逗号","。
s = "1 2 3 4 5"
lst = s.split()
# 等价于lst = s.split(" ")
s = "1,2,3,4,5"
lst = s.split(",")
# 两种分割均会得到lst = ["1", "2", "3", "4", "5"]
合并
字符串中的join(lst)方法以原字符串为合并符,将列表lst合并为一个新的字符串并返回。注意lst中的元素必须是字符串。最常用的合并符为空字符串""、空格字符串" "。
lst = ["a", "b", "c"]
s = "".join(lst)
# 会得到s = "abc"
s_space = " ".join(lst)
# 会得到s_space = "a b c"
s_star = "*".join(lst)
# 会得到s_star = "a*b*c"
字符串的分割与合并是一对相互对应的操作,常用于列表与字符串之间的相互转换。
注意:
- 字符串属于一种不可变数据类型,并不能直接进行修改操作。当题目要求对一个字符串进行修改时,通常会先将原字符串使用
split()方法或list()转化成列表,对列表修改后再使用join()方法得到新字符串的方式来实现。 - 列表
lst必须是一个字符串类型列表,即lst: List[str]。如果lst是一个整数类型列表,直接使用语句"".join(lst)会出现类型错误TypeError。如需进行合并操作,必须使用map()内置函数对lst中的元素进行类型转换,将lst中的所有int类型元素转换成str类型。即
lst = [0, 4, 2]
s = "".join(map(str, lst)) # 得到s = "042"
华为OD算法/大厂面试高频题算法练习冲刺训练
-
华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!
-
课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化
-
每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!
-
60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁
-
可上全网独家的欧弟OJ系统练习华子OD、大厂真题
-
可查看链接 大厂真题汇总 & OD真题汇总(持续更新)
-
绿色聊天软件戳
od1336了解更多
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!