(Leetcode函数用法记录)python format函数格式化问题及正则化表示

本文深入探讨了Python中format函数的高级用法,包括字符串格式化技巧和列表元素的填充方法。同时,文章详细解析了正则表达式的应用,如使用search函数进行模式匹配,以及常见元字符的解释。最后,对比了逻辑运算符and和or的优先级及其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(Leetcode函数用法记录)python format函数格式化问题及正则化表示

format函数用法

T='#'.join('@{}$'.format(s))

eg. s=‘abc’
’@{}$’.format(s)
输出为str类型’@abc$’
其中{}为后续s填入的地方;若有多个{}且后续s为列表结构则可多内容对应填入({0},{1}可分别对应s[0],s[1]的内容)。
T
输出为str类型‘@#a#b#c#$’
join函数的作用在于在字符串中每个字符之间插入目标值

正则表达式

ret = re.search('^(([+|-]\d+)|\d+)',str.strip())
        #strip移除字符串头尾指定的字符序列(默认为空格或换行符)
        #search在字符串中寻找模式匹配(返回第一个匹配)
        #^放在开头表示后续匹配内容必须是以要求匹配模式开头的字符串
        #+表示多个字符
        #[+|-]\d+表示+或者-带一堆数字
        #\d+纯一堆数字

字符串的各种处理操作中正则表达式还是个王者的!

关于and和or的优先级比较

1.默认不加括号时and的优先级高于or
2.x or y: x为真时输出x;x为假时输出y
3.x and y: x为真时输出y;x为假时输出x

<think>嗯,用户想了解Python中常见的字符串面试题。首先,我得回忆一下常见的考点。字符串在Python里是基础但重要的类型,面试题通常涉及基本操作、特性以及算法应用。 首先想到的是字符串的不可变性。这个点经常被考到,比如修改字符串中的某个字符,或者拼接字符串的效率问题。需要解释为什么字符串不可变,以及这样设计的优缺点。例如,使用加号拼接字符串和join方法的区别,可能涉及到内存和性能的问题。 然后是反转字符串,这应该是一个常见的题目。可能有多种方法,比如切片[::-1],或者使用循环逆序拼接。还有递归的方法,不过可能效率不高。此外,要考虑Unicode字符的情况,比如处理包含多字节字符的字符串,比如emoji或者中文,这时候反转会不会出问题? 接下来是字符串的常用方法,比如split()、strip()、replace()、find()、startswith()、endswith()等。这些方法在面试中可能会被问到具体用法或者应用场景。比如如何去除字符串两边的空格,如何分割字符串,替换子串等等。 字符串的格式化也是一个考点,包括旧式的%格式化,str.format()方法,以及Python3.6引入的f-string。需要比较它们的优缺点,比如f-string的可读性和执行效率更高。 检查字符串是否由数字构成,这个问题可能涉及到isdigit()方法,但也要注意全角数字或者其他语言中的数字字符的情况,这时候可能需要更全面的判断方法,比如尝试转换成float或者int,捕获异常来判断。 回文串的判断也是一个经典题目。回文是指正读反读都一样的字符串,比如"level"。常见的方法是将字符串反转后比较,或者用双指针法从两端向中间检查。需要注意大小写的处理,以及是否忽略空格和标点符号,不同的题目要求可能不同。 统计字符出现次数,可以用字典或者collections模块的Counter类。比如统计每个字符出现的次数,或者找出出现最多的字符。这可能需要遍历字符串,然后使用哈希表来记录频率。 字符串的排列组合问题,比如找出所有可能的排列,或者检查两个字符串是否为彼此的排列(即字符相同但顺序不同)。这可能涉及到排序后比较,或者用哈希表统计各字符的出现次数是否一致。 子串查找问题,比如实现类似str.find()的功能,或者KMP算法解决高效查找。不过在实际面试中,可能更关注暴力解法或者对内置方法的了解,以及时间复杂度分析。 字符串的编码问题,比如ASCII、Unicode、UTF-8的区别,如何处理中文字符,编码和解码的方法。可能还会问到字符串在Python2和Python3中的区别,比如Python3的str是Unicode,而bytes是字节序列。 另外,内存管理方面的问题,比如字符串驻留(interning),小字符串的缓存机制。例如,a = 'hello'和b = 'hello'是否指向同一个对象,而大字符串可能不会。这涉及到Python的优化机制。 还有,字符串和列表的转换,比如将字符串转换为列表进行修改后再转回字符串。例如,处理不可变字符串时,可能需要先转成列表,修改特定位置字符,再join成字符串。 可能还有一些算法题,比如最长不重复子串、最长回文子串、字符串转换整数(atoi)等。这些题目需要更复杂的逻辑和算法设计,比如滑动窗口、动态规划等。 需要分门别类,把这些知识点整理出来,用清晰的例子说明。比如反转字符串,给出不同的实现方法,比较它们的优缺点。对于字符串方法,举几个常用的例子,说明应用场景。在检查回文时,指出可能的陷阱,比如大小写和空格的处理。 还要注意,Python中的字符串是不可变的,所以每次操作都会生成新的字符串对象,这在涉及大量字符串拼接时会影响性能,这时候应该使用join方法而不是多次加号拼接。 可能还需要提到正则表达式的应用,比如用re模块进行复杂的字符串匹配和替换,这在处理复杂模式时非常有用,比如验证电子邮件格式、提取URL等。 最后,总结常见的面试题类型,帮助用户系统地复习字符串相关的知识点,并给出练习的建议,比如刷LeetCode上的相关题目,或者手动实现一些字符串操作函数来加深理解。</think>以下是一些Python中常见的字符串相关面试题及解析,按知识点分类整理: --- ### 一、基础操作与特性 1. **字符串不可变性** Q: 为什么说Python字符串是不可变的? A: 字符串对象创建后无法修改,任何操作(如拼接、替换)都会生成新对象。 ```python s = "hello" s[0] = 'H' # 报错:TypeError ``` 2. **拼接效率** Q: `s1 + s2` 和 `"".join([s1, s2])` 哪个更高效? A: `join()` 更高效,因为`+`会反复创建新对象,而`join()`一次性分配内存。 --- ### 二、反转字符串 1. **切片法** ```python s = "hello" reversed_s = s[::-1] # "olleh" ``` 2. **递归法** ```python def reverse_str(s): return reverse_str(s[1:]) + s[0] if s else "" ``` 3. **Unicode字符处理** 注意多字节字符(如emoji)的反转可能出错,需确保正确处理Unicode。 --- ### 三、字符串方法应用 1. **常用方法** ```python " abc ".strip() # "abc" "a,b,c".split(",") # ["a", "b", "c"] "hello".replace("l", "x") # "hexxo" ``` 2. **格式化方法** ```python name = "Alice" f_str = f"Hello {name}" # f-string(推荐) ``` --- ### 四、算法问题 1. **回文判断** ```python def is_palindrome(s): s = s.lower().replace(" ", "") return s == s[::-1] ``` 2. **最长不重复子串** **滑动窗口法**: ```python def length_of_longest_substring(s): char_map = {} left = max_len = 0 for right, c in enumerate(s): if c in char_map and char_map[c] >= left: left = char_map[c] + 1 char_map[c] = right max_len = max(max_len, right - left + 1) return max_len ``` --- ### 五、编码与内存 1. **编码问题** ```python s = "你好" bytes_s = s.encode("utf-8") # b'\xe4\xbd\xa0\xe5\xa5\xbd' ``` 2. **字符串驻留(Interning)** Python会缓存小字符串(如单单词),`a = "hello"; b = "hello"`,`a is b` 返回`True`。 --- ### 六、其他高频问题 1. **检查字符串是否为数字** ```python def is_number(s): try: float(s) return True except ValueError: return False ``` 2. **统计字符频率** ```python from collections import Counter s = "abracadabra" counter = Counter(s) print(counter) # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}) ``` --- ### 练习建议 - 刷题平台:LeetCode(如题目:反转字符串、有效括号、字符串转换整数等)。 - 手动实现:`split()`、`strip()`等基础方法,加深理解底层逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值