python学习从0到专家(8)容器之列表、元组、字典、集合、字符串小结

在 Python 中,不同的数据类型(如列表、元组、字典、集合、字符串等)都有各自的属性和方法,同时也涉及到遍历、深浅复制等重要概念。以下是对这些内容的全面详细解析:

1. 列表(list)

  • 属性和方法 :
    • append(x) :在列表末尾添加一个元素 x。
    • extend(iterable):将可迭代对象中的所有元素添加到列表末尾。
    • insert(i, x) :在指定索引 i 处插入元素 x。
    • remove(x) :移除列表中第一个值为 x 的元素,若不存在则抛出 ValueError。
    • pop([i]) :移除并返回指定索引 i 处的元素,若不指定索引则默认移除并返回最后一个元素。
    • clear():移除列表中的所有元素。
    • index(x[, start[, end]]) :返回列表中第一个值为 x 的元素的索引,若不存在则抛出 ValueError。
    • count(x) :返回元素 x 在列表中出现的次数。
    • sort(key=None, reverse=False) :对列表进行排序,key 用于指定排序规则,reverse 为 True 时降序排序,False 时升序排序(默认)。
    • reverse():反转列表中的元素顺序。
    • copy():返回列表的浅拷贝。
  • 遍历 :
    • 使用 for 循环 :for element in my_list: 直接遍历列表元素。
    • 使用 for 循环和 range() 函数 :for i in range(len(my_list)): 通过索引访问元素。
    • 使用 enumerate() 函数 :for index, element in enumerate(my_list): 同时获取索引和元素。
  • 深浅复制 :
    • 浅复制 :使用 copy() 方法或 list() 构造函数,如 new_list = my_list.copy() 或 new_list = list(my_list)。浅复制只复制顶层元素,嵌套的可变对象(如列表中的子列表)仍然是引用。
    • 深复制 :需要导入 copy 模块,使用 deepcopy() 函数,如 import copy; new_list = copy.deepcopy(my_list)。深复制会递归地复制所有层次的对象。

2. 元组(tuple)

  • 属性和方法 :
    • count(x) :返回元素 x 在元组中出现的次数。
    • index(x[, start[, end]]) :返回元组中第一个值为 x 的元素的索引,若不存在则抛出 ValueError。
  • 遍历 :和列表类似,可使用 for 循环、for 循环结合 range() 函数以及 enumerate() 函数。
  • 深浅复制:由于元组是不可变的,对元组进行复制时,无论是浅复制还是深复制,实际上都是返回对原元组的引用,因为元组的内容不能被修改。

3. 字典(dict)

  • 属性和方法 :
    • clear():移除字典中的所有键值对。
    • copy():返回字典的浅拷贝。
    • fromkeys(iterable[, value]) :创建一个新字典,以可迭代对象中的元素作为键,value 作为所有键对应的初始值(默认为 None)。
    • get(key[, default]) :返回指定键 key 对应的值,若键不存在则返回 default(默认为 None)。
    • items():返回一个包含所有键值对的视图对象,可用于遍历字典的键值对。
    • keys():返回一个包含所有键的视图对象,可用于遍历字典的键。
    • pop(key[, default]) :移除并返回指定键 key 对应的值,若键不存在则返回 default(默认为 None),若不提供 default 且键不存在则抛出 KeyError。
    • popitem() :移除并返回字典中的最后一对键值对,若字典为空则抛出 KeyError。
    • setdefault(key[, default]) :如果键 key 不存在,将其添加到字典中并设置值为 default(默认为 None),然后返回该键对应的值。
    • update(other) :使用来自 other(可以是字典或可迭代的键值对)的键值对更新字典。
    • values():返回一个包含所有值的视图对象,可用于遍历字典的值。
  • 遍历 :
    • 遍历键 :for key in my_dict: 或 for key in my_dict.keys():。
    • 遍历值 :for value in my_dict.values():。
    • 遍历键值对 :for key, value in my_dict.items():。
  • 深浅复制 :
    • 浅复制 :使用 copy() 方法或 dict() 构造函数,如 new_dict = my_dict.copy() 或 new_dict = dict(my_dict)。浅复制只复制顶层键值对,嵌套的可变对象仍然是引用。
    • 深复制 :导入 copy 模块,使用 deepcopy() 函数,如 import copy; new_dict = copy.deepcopy(my_dict)。深复制会递归地复制所有层次的对象。

4. 集合(set)

  • 属性和方法 :
    • add(x) :将元素 x 添加到集合中。
    • clear():移除集合中的所有元素。
    • copy():返回集合的浅拷贝。
    • difference(other) :返回一个新集合,包含在当前集合中但不在 other 集合中的元素,等价于 self - other。
    • difference_update(other) :从当前集合中移除在 other 集合中出现的元素,等价于 self -= other。
    • discard(x) :从集合中移除元素 x,若元素不存在不会抛出异常。
    • intersection(other) :返回一个新集合,包含同时在当前集合和 other 集合中的元素,等价于 self & other。
    • intersection_update(other) :更新当前集合,使其只包含同时在当前集合和 other 集合中的元素,等价于 self &= other。
    • isdisjoint(other) :如果当前集合和 other 集合没有共同元素,则返回 True,否则返回 False。
    • issubset(other) :如果当前集合是 other 集合的子集,则返回 True,否则返回 False,等价于 self <= other。
    • issuperset(other) :如果当前集合是 other 集合的超集,则返回 True,否则返回 False,等价于 self >= other。
    • pop() :移除并返回集合中的一个任意元素,若集合为空则抛出 KeyError。
    • remove(x) :从集合中移除元素 x,若元素不存在则抛出 KeyError。
    • symmetric_difference(other) :返回一个新集合,包含只在当前集合或 other 集合中出现的元素,等价于 self ^ other。
    • symmetric_difference_update(other) :更新当前集合,使其包含只在当前集合或 other 集合中出现的元素,等价于 self ^= other。
    • union(other) :返回一个新集合,包含在当前集合和 other 集合中的所有元素,等价于 self | other。
    • update(other) :更新当前集合,使其包含在当前集合和 other 集合中的所有元素,等价于 self |= other。
  • 遍历 :使用 for 循环遍历集合元素,如 for element in my_set:。
  • 深浅复制 :集合的 copy() 方法是浅复制,对于集合中的不可变元素(如数字、字符串等),浅复制和深复制效果相同,因为不可变元素无法修改;若集合中包含可变元素(如列表),则需要使用 copy 模块的 deepcopy() 函数进行深复制。

5. 字符串(str)

  • 属性和方法 :
    • capitalize():将字符串的第一个字符转换为大写,其余字符转换为小写。
    • casefold() :将字符串转换为小写形式,比 lower() 更强大,能处理一些特殊字符。
    • center(width[, fillchar]) :返回一个原字符串居中,并使用 fillchar(默认空格)填充至长度为 width 的新字符串。
    • count(sub[, start[, end]]) :返回子字符串 sub 在字符串中出现的次数。
    • encode(encoding='utf-8', errors='strict'):将字符串编码为字节对象。
    • endswith(suffix[, start[, end]]) :检查字符串是否以 suffix 结尾,返回 True 或 False。
    • expandtabs(tabsize=8) :将字符串中的制表符 \t 转换为空格,tabsize 指定每个制表符的宽度。
    • find(sub[, start[, end]]) :查找子字符串 sub 在字符串中第一次出现的索引,若不存在则返回 -1。
    • format(*args, **kwargs):格式化字符串,使用传入的参数替换字符串中的占位符。
    • index(sub[, start[, end]]) :查找子字符串 sub 在字符串中第一次出现的索引,若不存在则抛出 ValueError。
    • isalnum() :如果字符串中的所有字符都是字母或数字,则返回 True,否则返回 False。
    • isalpha() :如果字符串中的所有字符都是字母,则返回 True,否则返回 False。
    • isascii() :如果字符串中的所有字符都是 ASCII 字符,则返回 True,否则返回 False。
    • isdecimal() :如果字符串中的所有字符都是十进制数字,则返回 True,否则返回 False。
    • isdigit() :如果字符串中的所有字符都是数字,则返回 True,否则返回 False。
    • isidentifier() :如果字符串是有效的 Python 标识符,则返回 True,否则返回 False。
    • islower() :如果字符串中的所有字母都是小写字母,则返回 True,否则返回 False。
    • isnumeric() :如果字符串中的所有字符都是数字字符(包括汉字数字等),则返回 True,否则返回 False。
    • isprintable() :如果字符串中的所有字符都是可打印字符,则返回 True,否则返回 False。
    • isspace() :如果字符串中只包含空白字符,则返回 True,否则返回 False。
    • istitle() :如果字符串是标题格式(每个单词的首字母大写),则返回 True,否则返回 False。
    • isupper() :如果字符串中的所有字母都是大写字母,则返回 True,否则返回 False。
    • join(iterable):使用字符串作为分隔符,将可迭代对象中的元素连接成一个新的字符串。
    • ljust(width[, fillchar]) :返回一个原字符串左对齐,并使用 fillchar(默认空格)填充至长度为 width 的新字符串。
    • lower():将字符串中的所有大写字母转换为小写字母。
    • lstrip([chars]):移除字符串开头的指定字符(默认为空白字符)。
    • maketrans(x[, y[, z]]) :创建一个字符映射转换表,用于 translate() 方法。
    • partition(sep) :根据分隔符 sep 将字符串分为三部分,返回一个包含分隔符前、分隔符、分隔符后的元组。
    • removeprefix(prefix) :如果字符串以 prefix 开头,则移除 prefix 并返回剩余部分,否则返回原字符串(Python 3.9+)。
    • removesuffix(suffix) :如果字符串以 suffix 结尾,则移除 suffix 并返回剩余部分,否则返回原字符串(Python 3.9+)。
    • **`replace(old, new[, count
相关推荐
larance27 分钟前
[菜鸟教程] 机器学习教程十课-Python 机器学习应用
人工智能·python·机器学习
栖凤27 分钟前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
Yyyyyy~35 分钟前
【python】函数
python
外收内放39 分钟前
Python基础语法练习题(62原始版本及其优化版本)
开发语言·python
棉猴40 分钟前
玩游戏学Python4-字符串
python·游戏·字符串·pygame·玩游戏
马剑威(威哥爱编程)41 分钟前
【AI全栈后端12-12】Spring Boot 3.x 到 4.x 迁移实操:Jakarta 11、Jackson 3 与 AI 2.0
java·开发语言·spring boot·后端
三月微暖寻春笋1 小时前
【和春笋一起学C++】(七十二)类模板
开发语言·c++·实例·类模板·使用类模板·数组模板
释厄6231 小时前
智能体释放度子集律——文本 ⊂ 音频 ⊂ 视频⊂ 游戏
开发语言·游戏·microsoft·音视频
星恒随风1 小时前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
东来也_八门1 小时前
我用麦当劳开放的 MCP,把那个最冷门的营养接口做成了真实配餐求解器
python