Python中字符串常见操作总结

本文详细介绍了Python中字符串的常见操作,包括查找、替换、分割、大小写转换等,并通过示例展示了如何使用这些方法来处理字符串数据。

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

Python中字符串常见操作总结:

Num01–>find

检测 str 是否包含在 mystr中,如果是,返回开始的索引值;否则返回-1。也可以指定在一定的范围内。

mystr.find(str, start=0, end=len(mystr))

Num02–>index

跟find()方法一样,只不过如果str不在 mystr中会报一个异常.

mystr.index(str, start=0, end=len(mystr))

Num03–>count

返回 str在startend之间 在 mystr里面出现的次数

mystr.count(str, start=0, end=len(mystr))

Num04–>replace

把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.

mystr.replace(str1, str2,  mystr.count(str1))

Num05–>splite

str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串

mystr.split(str=" ", 2)

Num06–>capitalize

把字符串的第一个字符大写

mystr.capitalize()

Num07–>title

把字符串的每个单词首字母大写

 a = "hello xiaoke"
 a.title()
'Hello Xiaoke'

Num08–>startswith

检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False

mystr.startswith(obj)

Num09–>endswith

检查字符串是否以obj结束,如果是返回True,否则返回 False.

mystr.endswith(obj)

Num10–>lower

转换 mystr 中所有大写字符为小写

mystr.lower()

Num11–>upper

转换 mystr 中的小写字母为大写

mystr.upper()

Num12–>ljust

返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

mystr.ljust(width)

Num13–>rjust

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

mystr.rjust(width)

Num14–>center

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

mystr.center(width)

Num15–>lstrip

删除 mystr 左边的空白字符

mystr.lstrip()

Num16–>rstrip

删除 mystr 字符串末尾的空白字符

mystr.rstrip()

Num17–>strip

删除mystr字符串两端的空白字符

>>> a = "\n\t xiaoke \t\n"
>>> a.strip()
'xiaoke'

Num18–>rfind

类似于 find()函数,不过是从右边开始查找.

mystr.rfind(str, start=0,end=len(mystr) )

Num19–>rindex

类似于 index(),不过是从右边开始.

mystr.rindex( str, start=0,end=len(mystr))

Num20–>partition

把mystr以str分割成三部分,str前,strstr后

mystr.partition(str)

Num21–>rpartition

类似于 partition()函数,不过是从右边开始.

mystr.rpartition(str)

Num22–>splitlines

按照行分隔,返回一个包含各行作为元素的列表

mystr.splitlines()

Num23–>isalpha

如果 mystr 所有字符都是字母 则返回 True,否则返回 False

mystr.isalpha()

Num24–>isdigit

如果 mystr 只包含数字则返回 True 否则返回 False.

mystr.isdigit()

Num25–>isalnum

如果 mystr 所有字符都是字母或数字则返回 True,否则返回 False

mystr.isalnum()

Num26–>isspace

如果 mystr 中只包含空格,则返回 True,否则返回 False.

mystr.isspace()

Num27–>join

mystr 中每个字符后面插入str,构造出一个新的字符串

mystr.join(str)
### 面试题:如下字符串,含有空格和换行符,返回使用空格或者'\t'分割后的倒数第二个子串
test="hello world \t ha  he \nhei \nher"
# 以\t分割
newTest=test.split("\t")
print(newTest)
print("以\\t\t分割后的倒数第二个子串:%s"%newTest[len(newTest)-2])
# 以空格分割
newTest=test.split()
print(newTest)
print("以空格分割后的倒数第二个子串:%s"%newTest[len(newTest)-2])
结果如下:
['hello world ', ' ha he \nhei \nher']
以\t 分割后的倒数第二个子串:hello world 
['hello', 'world', 'ha', 'he', 'hei', 'her']
以空格分割后的倒数第二个子串:hei
<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、付费专栏及课程。

余额充值