Skip to main content

python学习之路☞15.data structure set.md

python学习之路☞15.数据结构 set

#python, #data_structure, #set, #union, #intersection, #difference, #dedup,
set 代码练习

'''
集合:
    由花括号内的的元素无序且不重复,并用逗号分隔的一种数据结构
    常用于去重和关系运算。
元素:任意类型
    特点:
        无序:
            集合中的元素没有特定的顺序。
        唯一:
            集合中的每个元素都是唯一的,没有重复。
创建:
    非空集合:
        使用 {} 括号创建一个包含元素的集合。
    空集合:
        使用 set() 内置函数创建一个空集合。

    ```python
    # 创建空集合
    empty_set = set()

    # 创建非空集合
    fruits = {"apple", "banana", "cherry"}
    ```

基本操作
    增:
        使用 add() 方法向集合添加单个元素。
    删:
        使用 remove() 方法删除指定元素,元素不存在时引发 KeyError 。
        使用 discard() 方法删除指定元素,元素不存在时不引发错误 。
        使用 pop() 方法随机删除并返回一个元素。
    检查元素:
        使用 in 运算符检查元素是否在集合中。
    集合长度:
        使用 len() 函数获取集合中元素的个数。

    ```python
    # 创建集合
    fruits = {"apple", "banana", "cherry"}

    # 添加元素
    fruits.add("orange")
    print(fruits)  # 输出:{'orange', 'banana', 'apple', 'cherry'}

    # 删除元素
    fruits.remove("banana")
    print(fruits)  # 输出:{'orange', 'apple', 'cherry'}

    # 检查元素
    print("apple" in fruits)  # 输出:True

    # 集合长度
    print(len(fruits))  # 输出:3
    ```

集合的常用方法
    add(item):
        向集合中添加一个元素。
    remove(item):
        从集合中移除一个元素,如果元素不存在会引发 KeyError 。
    discard(item):
        从集合中移除一个元素,如果元素不存在不会引发错误。
    pop():
        随机移除并返回一个元素。
    clear():
        清空集合中的所有元素。
    copy():
        返回集合的浅复制。
        浅复制是指创建一个新的集合对象,其中包含与原始集合相同的元素,
        但是新集合和原集合是独立的,即它们在内存中有不同的地址。
        这种性质和列表的切片很像

    ```python
    fruits = {"apple", "banana", "cherry"}

    # add
    fruits.add("orange")
    print(fruits)  # 输出:{'orange', 'banana', 'apple', 'cherry'}

    # discard
    fruits.discard("banana")
    print(fruits)  # 输出:{'orange', 'apple', 'cherry'}

    # pop
    removed_item = fruits.pop()
    print(removed_item)  # 输出:随机移除的元素
    print(fruits)  # 输出:剩余元素

    # clear
    fruits.clear()
    print(fruits)  # 输出:set()
    ```

实例应用
    集合运算
        并集:
            使用 union() 方法或 | 运算符获取两个集合的并集。
        交集:
            使用 intersection() 方法或 & 运算符获取两个集合的交集。
        差集:
            使用 difference() 方法或 - 运算符获取两个集合的差集。
        对称差集:
            使用 symmetric_difference() 方法或 ^ 运算符获取两个集合的对称差集。

    ```python
    set1 = {"apple", "banana", "cherry"}
    set2 = {"banana", "cherry", "date"}

    # 并集
    union_set = set1.union(set2)
    print(union_set)  # 输出:{'banana', 'apple', 'cherry', 'date'}

    # 交集
    intersection_set = set1.intersection(set2)
    print(intersection_set)  # 输出:{'banana', 'cherry'}

    # 差集
    difference_set = set1.difference(set2)
    print(difference_set)  # 输出:{'apple'}

    # 对称差集
    symmetric_difference_set = set1.symmetric_difference(set2)
    print(symmetric_difference_set)  # 输出:{'apple', 'date'}
    ```

    去重:集合可以用于从列表中去除重复项。
    ```python
    items = ["apple", "banana", "apple", "cherry", "banana"]
    unique_items = list(set(items))
    print(unique_items)  # 输出:['apple', 'banana', 'cherry']
    ```

    集合推导式:集合推导式提供了一种简洁的语法来创建集合。
    ```python
    # 生成包含从0到9的平方数的集合
    squares = {x ** 2 for x in range(10)}
    print(squares)  # 输出:{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
    ```
'''

# 创建集合
print('---------创建集合-----------')
make_set = set()  # set() 内置函数创建 集合
print(make_set, type(make_set))
"""
这里会发现,True不会被打印出来
在 Python 中,布尔类型的 True 和整数 1 被认为是相等的。
在集合中,由于元素的唯一性,当添加 1 后,再添加 True 时,集合会忽略 True
"""
make_set = {1, 1.9, True, '你好世界'}  # {elements} 创建
print(make_set, type(make_set))

# 操作 set 集合
# 增
print('---------增加元素-----------')
make_set.add('你好')
make_set.add(1.99)
make_set.add(False)
make_set.add(2)
print(make_set, type(make_set))
# 删
print('---------删除元素-----------')
make_set.remove(1)
print(make_set, type(make_set))
make_set.discard('你好世界')
print(make_set, type(make_set))
print('删除', make_set.pop(), '元素,', make_set, type(make_set))
# 检查元素
print('---------检查元素-----------')
print(' 你好世界 在集合里吗?', '你好世界' in make_set)

# 获取长度
print('---------获取长度-----------')
print('长度:', len(make_set))

# 复制集合
print('---------复制集合-----------')
copy_set = make_set.copy()
print(copy_set, type(copy_set))

# 清空集合
print('---------清空集合-----------')
make_set.clear()
print(make_set, type(make_set))

# 集合运算
print('---------集合运算 并-----------')
make_set_0 = {1, 2, 3, 5, 7, 9}
make_set_1 = {1, 2, 4, 6, 8, 10}
print('集合0:', make_set_0)
print('集合1:', make_set_1)
print('并集运算结果:', make_set_0.union(make_set_1))
print('---------集合运算 交-----------')
print('交集运算结果:', make_set_0.intersection(make_set_1))
"""
这里就能看出来,差集运算是第一个集合与第二个集合比较
将第一个集合种不同的元素拿出来
"""
print('---------集合运算 差-----------')
print('差集运算结果集合0种的不同元素:', make_set_0.difference(make_set_1))
print('差集运算结果集合1种的不同元素:', make_set_1.difference(make_set_0))
"""
这里就能看出来,对称差集运算是第一个集合与第二个集合比较
将两个集合中共有的部分剔除然后合并
"""
print('---------集合运算 对称差-----------')
print('对称差集运算结果:', make_set_0.symmetric_difference(make_set_1))

# 列表去重
"""
利用set元素唯一的特性可以为列表这种带有索引有序的元素去重
"""
make_list = [1, 2, 1, 3, 4, 5, 6]
print(make_list, '去重结果:', list(set(make_list)))  # 列表转化为集合再将集合转化为列表

# 集合推导式创建 0x3~4x3
"""
i * 3 for i in range(5)
这个推导式的过程可以看作是以下的结构
for i in range(5):
    i*3
"""
result_set = {i * 3 for i in range(5)}
print(result_set)

参考

Sets — Python 3 docs
Python Set — python.land

Comments

Popular posts from this blog

python学习之路☞9.Comment, Primitive Data Types and Branch Conditional Structure if ... else ...

python学习之路☞9.Comment, Primitive Data Types and Branch / Conditional Structure if … else … #python,#Comment,#data type,#branch/conditional structure,#input(),#int,#float,#complex,#boolean,#if … else …, 注释(Comment) 内置函数input()(input() Function) 基本数据类型整数(Primitive Data Types int) 基本数据类型小数(Primitive Data Types float) 基本数据类型复数(Primitive Data Types complex) 基本数据类型布尔(Primitive Data Types boolean) 分支结构if … else …(Branch / Conditional Structure if … else …) 参考 Comment ''' 注释: 给人看的说明文字,Python 解释器完全忽略 要点 # 让该行 # 之后的内容全部失效,解释器跳过。 行尾注释与代码在同一行,通常用于简短说明。 docstring(三引号字符串)放在函数/类/模块第一行时,可被 help() 和文档工具读取,有特殊意义。 好的注释解释"为什么",而不是"做了什么"(代码本身已经说明了做了什么): # ✗ i = i + 1 # i 加 1 # ✓ i += 1 # 跳过表头行 ''' # 这是单行注释,# 号后面全部忽略 x = 10 # 行尾注释,代码照常执行 # 多行注释:每行都加 # # 第一行说明 # 第二行说明 # 第三行说明 """ 这是多行字符串(docstring) 虽然常被当注释用, 但本质是字符串字面量,不是注释。 通常用于函数/类的文档说明。 """ def add ( a , b ) : """返回 a 与 b 的和。"...

OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南

OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 #docker,#linux,#termux,#android,#kernel,#lineageos,#oneplus,#git,#android16, gmkm6 x86_64 主机配置环境 安装配置 docker 防止污染环境 更新 docker 插件 compose 更新 docker 插件 buildx 创建编译容器 容器内编译镜像刷机 安装magisk,termux获取root termux检测内核docker缺失功能 根据内核docker缺失功能编译boot.img并获取root 开启全部必要扩展功能 下面的步骤是开启大部分非必要扩展功能 修补内核代码方案 下面的步骤是开启剩余部分非必要扩展功能 修补内核 安装测试运行 termux docker 其它关于termux的docker-compose和docker-buildx更新 安装用于校验的工具 开机自启动和容器化部署使用例子 Android16尝试开启KVM失败的例子(不用试了,唉) 内核修补 参考&感谢 gmkm6 x86_64 主机配置环境 注意,获取自己的手机型号代号,这一点很重要在后续的命令中都要用到 比如我的手机 oneplus7pro 是 guacamole 也可以尝试通过命令获取获取,但是我不知道是不是所有设备都是这样获取的 adb shell getprop ro.boot.project_codename 最重要的是,一定要找好固件包,免得变成砖头,有线刷包就可以怎么折腾都不怕 听我说,编译内核是一件很枯燥的核对过程,这个过程需要考虑到各项之间的互相依赖和冲突并以此作出取舍 这不是个简单的过程,这里只展示具有逻辑的依赖项,需要耐心和不断的试错总结 不得不说设计的内核是一件件精美的艺术品,从某种意义上来讲,万事万物皆为艺术,而探索艺术本身是...

OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南

OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 #docker,#linux,#termux,#android,#kernel,#lineageos,#oneplus,#git, gmkm6 x86_64 主机配置环境 安装配置 docker 防止污染环境 更新 docker 插件 compose 更新 docker 插件 buildx 创建编译容器 容器内编译镜像刷机 安装magisk,termux获取root termux检测内核docker缺失功能 根据内核docker缺失功能编译boot.img并获取root 安装测试运行 termux docker 其它关于termux的docker-compose和docker-buildx更新 参考&感谢 注意,获取自己的手机型号代号,这一点很重要在后续的命令中都要用到 比如我的手机 oneplus7pro 是 guacamole 也可以尝试通过命令获取获取,但是我不知道是不是所有设备都是这样获取的 adb shell getprop ro.boot.project_codename 最重要的是,一定要找好固件包,免得变成砖头,有线刷包就可以怎么折腾都不怕 最近 OP7P 设备型号是 guacamole 手机刷了 GM1910_11_H.40 即 android 12 https://gauss-componentotacostmanual-sg.allawnofs.com/remove-d74c973c240292cb011317bb07f424a2/component-ota/23/03/28/6d4604798d27450e8de05671d5effbae.zip 内核版本 4.14.180-perf+ 发现 github.com/OnePlusOSS 官方有相关的开放残缺的内核源码,但缺失了很多代码配置 https://github.com/OnePlusOSS/android_kernel_o...