python对字符串的总结(中)

本文介绍了字符串的基本操作技巧,包括使用[]进行正反向搜索提取字符、字符串的替换与切片、split()与join()函数的使用、字符串驻留的概念以及如何判断子字符串的存在。通过这些实用的操作,帮助读者更高效地处理字符串数据。

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

7.使用[ ]提取字符

***提取的方法有两种:正向搜索;反向搜索。
正向搜索:最左侧第一个字符,偏移量0,第二个偏移量1,以此类推,直到len(str)-1为止。
反向搜索:最右侧第一个字符,偏移量-1,第二个偏移量-2,以此类推,直到-len(str)为止。
***在这里插入图片描述

8.可变字符串和字符串的替换

字符串的替换 raplace()
可变字符串 io.StringIO()

在这里插入图片描述

9.字符串的切片slice()

所谓字符串的切片,顾名思义就是切开字符串,取子字符串
[起始偏移量start:终止偏移量: 步长step ]

在这里插入图片描述

10.split()函数与join()函数

split():可以基于指定的分隔符将字符串分隔成多个子字符串(存储列表中)如果不指定,则默认为空白字符。
join()函数与split()函数相反,join函数则是用于一系列子字符串的相加。

在这里插入图片描述

11.字符串驻留

字符串驻留:仅保存一份相同且不可变的字符串的方法,不同的值被存放在字符串驻留池中
字符串(仅包含下划线—,字母,和数字),会启用字符串驻留

在这里插入图片描述

12.in/not in 判断某个子字符串是否属于大字符串中

在这里插入图片描述

<think>嗯,用户现在想要了解Python字符串的相关操作和功能的总结,特别是去重和排序。我需要根据之前的对话和提供的参考资料来整理一个清晰的总结。首先,用户之前的问题是关于如何去除字符串中的重复字符并按字母升序排序,我之前给出的回答已经涉及了使用集合去重和sorted函数排序的方法,但用户现在希望更全面的总结。 首先,我需要回顾用户提供的引用内容。引用[1]提到使用字典来保持插入顺序的去重方法,这在Python 3.7及以上版本有效。引用[2]和[3]展示了使用集合去重并结合排序的方法,而引用[4]则列出了多种去重方法,包括循环、列表推导、集合、字典以及字符串切片等方法。用户现在需要的是将这些方法进行系统化的总结,涵盖去重和排序的不同场景和需求。 接下来,我应该分两部分来总结:去重和排序。去重方面,需要包括保持顺序和不保持顺序的不同方法。比如,使用集合是最快的,但会打乱顺序;而使用字典或列表循环可以保持顺序。排序方面,要区分默认的ASCII排序、不区分大小写以及自定义顺序的情况。 用户可能的需求包括保留首次出现顺序、处理大小写、支持中文或其他字符,以及自定义排序规则。例如,用户提到的问题示例中有不区分大小写的排序需求,引用[3]中的方法可能需要调整key参数来实现。同时,引用[4]中的方法5使用fromkeys()也是一个有效的去重方式,可以保持顺序。 在整理时,需要注意不同方法的优缺点,比如时间复杂度。例如,集合去重是O(n),而保持顺序的循环方法可能是O(),因为每次需要检查元素是否在列表中。对于排序,sorted函数的复杂度是O(n log n),但如果有自定义的排序规则,可能需要额外的处理步骤。 另外,用户可能需要知道如何处理特殊字符或中文排序。例如,中文字符的排序可能需要使用locale模块或自定义拼音排序,这可能需要额外的库支持,如引用[3]中提到的。 最后,应该总结出不同场景下的最佳实践,比如需要保持顺序时使用字典或列表循环,不需要保持顺序时使用集合;排序时根据需求调整key函数等。同时,提供示例代码和注意事项,比如大小写敏感问题、中文字符处理等,帮助用户全面理解。</think>### Python 字符串操作功能总结:去重与排序 --- #### **一、字符串去重** Python字符串去重的核心是 **保留唯一字符**,根据是否保留顺序可分为两类方法: --- ##### **1. 不保留顺序(快速去重)** - **方法**:使用集合(`set`)特性自动去重 - **特点**:时间复杂度 $O(n)$,但字符顺序随机 - **代码示例**: ```python s = "abcmmnbcdacbhk" unique_chars = ''.join(set(s)) # 输出可能为 "abchkdnm" 等随机顺序 ``` ##### **2. 保留顺序(按首次出现顺序)** - **方法1**:循环遍历 + 列表筛选 - **特点**:时间复杂度 $O(n^2)$,适合短字符串 ```python def remove_duplicates(s): seen = [] for char in s: if char not in seen: seen.append(char) return ''.join(seen) print(remove_duplicates("abcmmnbcdacbhk")) # 输出: abcmndhk ``` - **方法2**:利用字典保留插入顺序(Python 3.7+) - **特点**:时间复杂度 $O(n)$,高效且顺序稳定 ```python def remove_duplicates_fast(s): return ''.join(dict.fromkeys(s)) print(remove_duplicates_fast("abcmmnbcdacbhk")) # 输出: abcmndhk [^1] ``` --- #### **二、字符串排序** 排序需区分 **大小写敏感** 和 **自定义规则**: --- ##### **1. 默认排序(ASCII 值升序)** - **方法**:使用 `sorted()` 函数 - **规则**:大写字母在前(如 `'A' < 'a'`),符号和数字按 ASCII 值排列 ```python s = "abcmmnbcdacbhk" sorted_str = ''.join(sorted(s)) # 输出: aabbcccdbdhkmn ``` ##### **2. 不区分大小写排序** - **方法**:自定义排序规则,统一转小写后比较 ```python s = "AppleBanana" sorted_str = ''.join(sorted(s, key=lambda x: x.lower())) # 输出: AaaBelnnp [^4] ``` ##### **3. 自定义顺序排序** - **场景**:按中文拼音、笔画等排序 - **依赖库**:`locale` + `functools`(需系统支持中文环境) ```python import locale from functools import cmp_to_key locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF-8') s = "张三李四王五" sorted_str = ''.join(sorted(s, key=cmp_to_key(locale.strcoll))) # 按拼音排序[^3] ``` --- #### **三、去重 + 排序组合操作** 根据需求选择组合方式: --- ##### **场景1:去重后按默认顺序排序** ```python s = "abcmmnbcdacbhk" result = ''.join(sorted(set(s))) # 输出: abcdhkmn ``` ##### **场景2:去重保留顺序 + 自定义排序** ```python s = "BananaApple" # 去重保留顺序 unique_ordered = ''.join(dict.fromkeys(s)) # 输出: BanaAple # 不区分大小写排序 final_result = ''.join(sorted(unique_ordered, key=lambda x: x.lower())) # 输出: AaBelnp [^1] ``` --- #### **四、关键问题总结** | 需求 | 推荐方法 | 时间复杂度 | |---------------------|-------------------------------------|------------------| | 快速去重(不保序) | `set()` | $O(n)$ | | 去重且保序 | `dict.fromkeys()` | $O(n)$ | | 默认排序 | `sorted(s)` | $O(n \log n)$ | | 不区分大小写排序 | `sorted(s, key=str.lower)` | $O(n \log n)$ | | 中文字符排序 | `locale.strcoll` | 依赖系统实现 | --- ### **相关问题** 1. 如何实现字符串去重后按字符出现次数排序? 2. 如何处理包含数字的混合字符串排序(如自然排序)? 3. 如何优化大规模字符串去重的内存占用?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值