当前位置: 首页 > news >正文

Python--数据类型(下)

1. 集合(set)

集合是一个 无序、可变、不允许数据重复 的容器。

1.1 定义

v1 = {11, 22, 33, "alex"}
  • 无序:无法通过索引取值。
  • 可变:可以添加和删除元素。
  • 不允许数据重复:添加重复元素时,集合不会发生变化。

注意:定义空集合时,只能使用 v = set()​,不能使用 v = {}​(这样是定义一个空字典)。

v1 = set()  # 空集合
v2 = {}     # 空字典

1.2 独有功能

  1. 添加元素

    data = {"刘嘉玲", "关之琳", "王祖贤"}
    data.add("郑裕玲")
    print(data)
    
  2. 删除元素

    data = {"刘嘉玲", "关之琳", "王祖贤"}
    data.discard("关之琳")
    print(data)
    
  3. 交集

    s1 = {"刘能", "赵四", "⽪⻓⼭"}
    s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
    s3 = s1.intersection(s2)  # 或 s1 & s2
    print(s3)  # {"⽪⻓⼭"}
    
  4. 并集

    s1 = {"刘能", "赵四", "⽪⻓⼭"}
    s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
    s3 = s1.union(s2)  # 或 s1 | s2
    print(s3)
    
  5. 差集

    s1 = {"刘能", "赵四", "⽪⻓⼭"}
    s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
    s3 = s1.difference(s2)  # 或 s1 - s2
    print(s3)  # {"刘能", "赵四"}
    

1.3 公共功能

  1. 长度

    v = {"张三", "李四", "王五"}
    print(len(v))  # 3
    
  2. for 循环

    v = {"张三", "李四", "王五"}
    for item in v:
        print(item)
    
  3. 转换

    • 其他类型转换为集合时,会自动去重。
    v1 = [11, 22, 33, 11, 3, 99, 22]
    v2 = set(v1)
    print(v2)  # {11, 22, 33, 3, 99}
    

1.4 其他

  1. 元素必须可哈希
    集合的元素必须是可哈希的值(如 int​、bool​、str​、tuple​),而 list​、set​、dict​ 不可哈希。
  2. 查找速度快
    集合的查找效率非常高,因为其底层基于哈希表实现。

2. 字典(dict)

字典是一个 无序、键不重复 且元素只能是 键值对 的 可变容器。

2.1 定义

v1 = {}
v2 = dict()
info = {
    "age": 12,
    "status": True,
    "name": "qyiao",
    "hobby": ["篮球", "足球"]
}

键值要求:

  • 键:必须可哈希(如 int​、bool​、str​、tuple​)。
  • 值:可以是任意类型。

2.2 独有功能

  1. 获取值

    info = {"age": 12, "status": True, "name": "qyiao"}
    data = info.get("name")
    print(data)  # qyiao
    
  2. 所有的键

    info = {"age": 12, "status": True, "name": "qyiao"}
    print(info.keys())  # dict_keys(['age', 'status', 'name'])
    
  3. 所有的值

    info = {"age": 12, "status": True, "name": "qyiao"}
    print(info.values())  # dict_values([12, True, 'qyiao'])
    
  4. 所有的键值对

    info = {"age": 12, "status": True, "name": "qyiao"}
    print(info.items())  # dict_items([('age', 12), ('status', True), ('name', 'qyiao')])
    
  5. 设置值

    data = {"name": "qyiao", "email": "xxx@live.com"}
    data.setdefault("age", 18)
    print(data)  # {'name': 'qyiao', 'email': 'xxx@live.com', 'age': 18}
    
  6. 更新字典

    info = {"age": 12, "status": True}
    info.update({"age": 14, "name": "qyiao"})
    print(info)  # {'age': 14, 'status': True, 'name': 'qyiao'}
    
  7. 移除键值对

    info = {"age": 12, "status": True, "name": "qyiao"}
    data = info.pop("age")
    print(info)  # {'status': True, 'name': 'qyiao'}
    

2.3 公共功能

  1. 长度

    info = {"age": 12, "status": True, "name": "qyiao"}
    print(len(info))  # 3
    
  2. 是否包含

    info = {"age": 12, "status": True, "name": "qyiao"}
    print("age" in info)  # True
    
  3. for 循环

    info = {"age": 12, "status": True, "name": "qyiao"}
    for key, value in info.items():
        print(key, value)
    

2.4 其他

  1. 嵌套
    字典的值可以是任意类型,包括列表、字典等。

    data = {
        "name": "汪峰",
        "age": 48,
        "wife": [{"name": "国际章", "age": 38}],
        "children": ["第一个娃", "第二个娃"]
    }
    

3. 浮点型(float)

浮点型用于表示小数。

3.1 基本操作

  1. 定义

    v1 = 3.14
    v2 = 9.89
    
  2. 类型转换

    v1 = 3.14
    data = int(v1)
    print(data)  # 3
    
  3. 保留小数位数

    v1 = 3.1415926
    result = round(v1, 3)
    print(result)  # 3.142
    

3.2 浮点型的坑

浮点型在计算时可能存在精度问题,例如:

print(0.1 + 0.2)  # 0.30000000000000004

解决方案:使用 decimal​ 模块进行精确计算。

import decimal
v1 = decimal.Decimal("0.1")
v2 = decimal.Decimal("0.2")
print(v1 + v2)  # 0.3

相关文章:

  • 【mysql80 安装】mysql8.0.31 安装修改3306端口
  • 【个人开源】——从零开始在高通手机上部署sd(一)
  • Python开源项目月排行 2024年12月
  • 数据结构与算法:奇校验与偶校验
  • 机器视觉3D中,深度图与点云图数据对比分析
  • 【深度学习】Pytorch的深入理解和研究
  • 目的NAT(NAT Server)
  • [实现Rpc] Dispatcher类的实现 | 开闭原则 | 测试 | 传gitee
  • Jupyter里面的manim编程学习
  • Simulink库浏览器中有大量的模型组件工具箱介绍
  • Python应用算法之贪心算法理解和实践
  • 站长工具SEO综合查询是什么?怎么利用站长工具SEO综合查询
  • 第8章:LangChain检索增强生成RAG--2.2Core RAG APIs
  • 《A++ 敏捷开发》- 16 评审与结对编程
  • PyTorch gather 方法详解:作用、应用场景与示例解析(中英双语)
  • 小米手环7屏幕脱胶维修
  • javaSE学习笔记24-注解(annotation)
  • SBOM情报预警 | 恶意NPM组件窃取Solana智能合约私钥
  • Docket Desktop 安装redis 并设置密码
  • 【c++】【线程池】线程池概述
  • 纪念|演员朱媛媛:她的表演将日常琐碎升华为艺术真实
  • 深圳南山法院回应“执行款未到账”:张核子公司申请的执行异议成立
  • 中方是否支持或参加俄乌谈判?外交部:支持一切有利于和平的努力
  • 王楚钦球拍检测环节受损,国际乒联发声明
  • 印军称中国向巴基斯坦提供防空系统协助,外交部:中方十分重视与印、巴两国关系
  • 俄乌刚谈完美国便筹划与两国领导人通话,目的几何?