在 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