本文共 4406 字,大约阅读时间需要 14 分钟。
在 Python 中,集合(set)是一种无序的、不重复的数据结构,用于存储唯一的元素。集合支持数学集合的一些操作,如交集、并集、差集等。集合中的元素是无序的,且每个元素只能出现一次。集合可以通过大括号 {} 或 set() 函数来创建。集合的元素必须是可哈希的(不可变的),例如数字、字符串、元组等,但列表、字典等可变类型不能作为集合的元素。
创建一个空集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典。以下是集合的创建示例:
# 创建集合 s1s1 = set()print(s1) # 输出: set()s2 = {1, 2, 3, 4, 5}print(s2) # 输出: {1, 2, 3, 4, 5}s3 = {10, 20, 30, 40, 50}print(s3)s4 = {2}print(s4)print(type(s4)) # 输出: set() # 创建空集合{1, 2, 3, 4, 5} # 创建非空集合{50, 20, 40, 10, 30} # 创建非空集合{2} # 创建非空集合 # 集合中不存在相同的元素s5 = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1}print(s5)s6 = {(10, 20), (20, 10)}print(s6)s8 = {(10,), (10,)}# 在其他编程语言中,输出 {(10,), (10,)},但在 Python 中由于 id 不同,会被认为是相同的元素,所以输出 {(10,)}print(s8) {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}{(20, 10), (10, 20)}{(10,)}
# 固定集合s9 = frozenset({1, 2, 3, 4, 5, 6, 7, 8, 9, 10})print(s9) frozenset({1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) s1 = set([1, 2, 3, 4, 5])s1.add(6)s1.add(1)print(s1)s1.update([7, 8, 9]) # 添加多个数据print(s1)s1.update([1, 2, 3, 4, 5], (10, 20)) # 添加多个数据print(s1)
{1, 2, 3, 4, 5, 6}{1, 2, 3, 4, 5, 6, 7, 8, 9}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20} s1 = {1, 2, 3, 4, 5}s1.remove(1) # 删除元素# print(s1) # 如果元素不存在会报错s1.discard(1) # 如果元素不存在不会报错print(s1)s1.pop() # 随机删除一个元素print(s1) {2, 3, 4, 5}{3, 4, 5} s1 = {10, 20, 30}print(20 in s1) True
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s1.add(11)print(s1) {1, 2, 3, 4, 5, 6, 7, 8, 9, 11} s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s1.clear()print(s1) set()
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = s1.copy()print(s2) s2 = {1, 2, 3, 4, 5, 6, 7, 8, 9} s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.difference(s2)print(s3) {1, 2, 3, 4, 5, 6, 7} s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.difference_update(s2)print(s3) None
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.intersection(s2)print(s3) {8, 9} s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.union(s2)print(s3) {1, 2, 3, 4, 5, 6, 7, 8, 9, 13} s1 = {1, 2, 3}s2 = {8, 9, 13}s3 = s1.isdisjoint(s2)print(s3) True
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9}s3 = s1.issuperset(s2)print(s3) True
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.issubset(s2)print(s3) False
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.symmetric_difference(s2)print(s3) {1, 2, 3, 4, 5, 6, 7, 13} s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s2 = {8, 9, 13}s3 = s1.symmetric_difference_update(s2)print(s3)print(type(None)) None
x = [1, 2, 3, 4]x[1] = 5print(x)
dict1 = {'name': '张三', 'age': 18, 'sex': '男'}dict2 = {'name': '李四', 'age': 16}dict1.update(dict2)print(dict1) s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}s1.add(11)print(s1) 其主要核心思想是被输入的数据被底层二进制所录存,其其他增删查改行为不会改变底层二进制。
frozenset 是不可变版本的集合,一旦创建,无法修改其元素。True 和 False 也属于不可变类型。None 也是不可变类型。内存管理
行为差异
作为字典键
以下是 Python 中常用的类型转换函数及其示例:
| 函数 | 说明 | 示例 |
|---|---|---|
| int(x) | 将 x 转换为整数类型 | int("10") → 10 |
| float(x) | 将 x 转换为浮点数类型 | float("3.14") → 3.14 |
| str(x) | 将 x 转换为字符串类型 | str(123) → "123" |
| list(x) | 将 x 转换为列表类型,x 必须是可迭代对象。 | list((1, 2, 3)) → [1, 2, 3] |
| tuple(x) | 将 x 转换为元组类型,x 必须是可迭代对象。 | tuple([1, 2, 3]) → (1, 2, 3) |
| set(x) | 将 x 转换为集合类型,x 必须是可迭代对象。 | set([1, 2, 3]) → {1, 2, 3} |
| dict(x) | 将 x 转换为字典类型,x 必须是可迭代的键值对序列。 | dict([('a', 1), ('b', 2)]) → {'a': 1, 'b': 2} |
| bool(x) | 将 x 转换为布尔类型,x 的值可以是任何对象,返回 True 或 False。 | bool(0) → False;bool("abc") → True |
| frozenset(x) | 将 x 转换为冻结集合,x 必须是可迭代对象。 | frozenset([1, 2, 3]) → frozenset({1, 2, 3}) |
| bytes(x) | 将 x 转换为字节串类型,x 可以是字符串、字节数组等。 | bytes("hello", "utf-8") → b'hello' |
| complex(x) | 将 x 转换为复数类型。 | complex(2) → (2+0j) |
| chr(x) | 将整数 x 转换为对应的字符,x 是 Unicode 码点。 | chr(97) → 'a' |
| ord(x) | 将字符 x 转换为对应的整数,x 是一个单一字符。 | ord('a') → 97 |
| eval(x) | 将字符串 x 作为 Python 表达式进行求值并返回结果。 | eval('3 + 4') → 7 |
| set(x) | 将可迭代对象 x 转换为集合。 | set([1, 2, 2, 3]) → {1, 2, 3} |
通过这些类型转换函数,可以将不同类型的数据进行转换和操作,从而在实际开发中灵活运用。
转载地址:http://yoofk.baihongyu.com/