【python系列】python数据类型的分类和比较

一、数据类型的定义

在程序设计的类型系统中,数据类型(英语:Data type),又称资料型态、资料型别,是用来约束数据的解释。——Wikipedia

从定义我们可以看出来,数字类型的理解最主要的是约束数据的解释,每个类型都有他们自己所使用得场景,这个就是数字类型的分类,分类的结果可以方便我们更好的理解。

从官网可以看到,python所使用得数字类型有很多:
在这里插入图片描述

二、数据类型的分类

短时间内掌握所有的数字类型是不现实的,如果要学习我们可以先从数字类型的分类开始学习。
怎么理解呢?我们从日常生活中出发,我们首先会想到,生活中最常接触的是语言,语言做下分类就涉及到文字和数字,分别对应得是字符串和数字类型。
再进一步,我们为了更好的理解,字符串和数字类型就涉及到做区分,又分为有序和无序,有序的数据类型分为文本序列类型、序列类型、映射类型和二进制序列类型,无序的数据类型为集合类型。还有一种类型是既不属于有序类型,又不属于无序类型,我们给它加个名称叫特殊类型,主要有以下几种数字类型、布尔类型、空类型、函数类型、迭代器与生成器、省略类型、模块与类。

有序数据类型无序数据类型特殊数据类型
字符串、序列类型、映射类型、二进制序列类型集合类型数字类型、布尔类型、空类型、函数类型、迭代器与生成器、省略类型、模块与类
str、list、tuple、range、dict、bytes, bytearray, memoryviewset、frozensetint、float、complex、bool、NoneType、function、generator、ellipsis、module、class

还涉及到很多未分类的数据类型,就又涉及到数据类型的再一次分类,我们这里暂时先不涉及,因为学习编程开发要循序渐进,先抓住重点,后面再进行了解和补充。

三、数据类型的比较

我们既然已经区分了有序数据类型、无序数据类型、特殊数据类型,那么我就需要进行比较,比较每个数据类型之间的差异。

1. 有序的数据类型

有序的数据类型是指其元素存储的顺序固定,并且能够通过索引或迭代保持这种顺序。

常见的有序数据类型

  • list(列表):可变类型,元素按插入顺序存储,支持索引访问。
lst = [1, 2, 3]
print(lst[0])  # 输出 1
  • tuple(元组):不可变类型,元素按插入顺序存储,支持索引访问。
tup = (1, 2, 3)
print(tup[0])  # 输出 1
  • str(字符串):不可变类型,字符按插入顺序存储,支持索引访问。
s = "hello"
print(s[0])  # 输出 'h'
  • dict(字典,Python 3.7+):插入顺序保留,支持键值对访问。
d = {"a": 1, "b": 2}
print(list(d.keys()))  # 输出 ['a', 'b']
  • range(范围对象):表示一系列连续整数,按顺序生成。
r = range(5)
print(list(r))  # 输出 [0, 1, 2, 3, 4]
  • bytes(不可变二进制序列):不可变类型,按插入顺序存储,支持索引和切片操作。
b = b'hello'
print(b[0])     # 输出 104 (ASCII 'h')
print(b[1:3])   # 输出 b'el'
  • bytearray(可变二进制序列):可变类型,按插入顺序存储,支持索引和切片操作。
ba = bytearray(b'hello')
ba[0] = ord('H')  # 修改第一个字节
print(ba)         # 输出 bytearray(b'Hello')
  • memoryview(内存视图):提供对二进制数据的有序视图,支持索引和切片操作。
mv = memoryview(b'hello')
print(mv[0])      # 输出 104 (ASCII 'h')
print(mv[1:3].tobytes())  # 输出 b'el'

2. 无序的数据类型

无序的数据类型是指其内部存储顺序不固定,无法通过索引访问元素,顺序可能因操作而变化(如插入或删除元素)。
常见的无序数据类型

  • set(集合):存储不重复元素,无特定顺序
s = {1, 2, 3}
print(s)  # 输出可能是 {1, 2, 3},但顺序无法保证

frozenset(不可变集合):类似集合,但不可变。

fs = frozenset([1, 2, 3])
print(fs)  # 输出 frozenset({1, 2, 3})

3.特殊的数据类型

既不属于有序,也不属于无序的类型大多是原子类型或特殊类型,它们不存储多个元素,无法体现顺序性。这些类型在 Python 中用于表示单个值、逻辑操作、或用于组织代码。

1. 数字类型

  • int, float, complex
    • 它们是单独的值,不是容器类型,因此不涉及顺序。

2. 布尔类型

  • bool
    • 它只包含 True 和 False 两个值,不涉及多个元素的排列。

3. 空类型

  • NoneType
    • 表示“无值”或“空”,只有一个值 None,无存储顺序。

4. 函数类型

  • function
    • 表示可执行的逻辑操作,而非数据的存储和排列。

5. 迭代器与生成器

  • generator
    • 按需生成数据,但生成后无法再次访问已生成的数据。

6. 省略类型

  • ellipsis
    • 仅有 … 一个值,常用于占位或省略操作。

7. 模块与类

  • module, class
    • 用于代码的组织和定义,不存储具体的数据元素。

4. 对比总结

数据类型是否有序可变性备注
str有序不可变存储字符序列
list有序可变常用序列类型
tuple有序不可变用于不可变类型
dict(python3.7+)有序可变保留插入顺序
range有序不可变按顺序生成整数
bytes有序不可变二进制不可变序列
bytearray有序可变二进制可变序列
memoryview有序可变视图对二进制数据的高效操作
set无序可变无重复元素,操作后顺序可能改变
frozenset无序不可变无重复元素,适合需要哈希的情况
int, float, complex不适用不可变单个值,不涉及顺序
bool不适用不可变单个值,不涉及顺序
NoneType不适用不可变表示“无值”
function不适用不可变可执行的逻辑操作
generator不适用不可变按需生成数据,生成后不可重复迭代
ellipsis不适用不可变仅有一个值 …
module不适用可变用于代码组织,存储代码的对象
class不适用可变用户定义类型,表示行为和状态

注意:

  • Python 3.7+ 中的字典默认是有序的(按插入顺序存储)。
  • 有序类型支持索引或可预测的迭代顺序,而无序类型通常只支持元素检查和集合操作,特殊类型表示单个值、逻辑操作、或用于组织代码。

四、总结

这一章内容,我们主要记住以下几点:

  • 常用数据类型,分为有序类型、无序类型和特殊类型
  • 有序数据类型包括:文本序列类型、序列类型、映射类型、二进制序列类型
  • 无序数据类型包括:集合类型
  • 特殊数据类型包括:数字类型、布尔类型、空类型、函数类型、迭代器与生成器、省略类型、模块与类

从这篇文章我们知道,数据类型是一个集合概念,每个集合概念还包括子集合概念,子集合概念再包括子概念,如果想了解每个数据类型的使用,我们首先应该认识到针对数据类型的定义、分类和比较是一切学习的前提条件,学习其他学科也一样,只有学会定义、分类、比较才可以深入理解一个概念或集合概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19116.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot(二十七)SpringBoot集成XRebel实现异常定位

之前我使用JRebel实现了IDEA热更新。 这几天我无聊的时候,研究了一下JRebel发现,好像不止JRebel一个插件,同时安装的还有一个XRebel插件,百度了一下,XRebel可以实现异常定位,还有方法的执行分析&#xff0c…

windows上部署flask程序

文章目录 前言一、准备工作二、配置 Gunicorn 或 uWSGI1.安装 Waitress2.修改启动文件来使用 Waitress 启动 Flask 应用3.配置反向代理(可选)4.启动程序访问 三.Flask 程序在 Windows 启动时自动启动1.使用 nssm(Non-Sucking Service Manager…

python调用MySql保姆级教程(包会的)

目录 一、下载MySql 二、安装MySql 三、验证MySql是否OK 1、MySQL控制台验证 2、命令提示符cmd窗口验证 四、Python调用MySql 4.1 安装pysql 4.2 使用pysql 4.2.1、连接数据库服务器并且创建数据库和表 4.2.2 、将人脸识别考勤系统识别到的数据自动填入到数据库的表单中…

如何解决将长视频转换为易于处理的 Spacetime Patch 的问题?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 将长视频转换为易于处理的 Spacetime Patch(时空补丁)是一项挑战,尤其是当视频内容复杂或包含长时间连续场景时。在计算机视觉和视频分析等领域,Spacetim…

大数据学习16之Spark-Core

1. 概述 1.1.简介 Apache Spark 是专门为大规模数据处理而设计的快速通用的计算引擎。 一种类似 Hadoop MapReduce 的通用并行计算框架,它拥有MapReduce的优点,不同于MR的是Job中间结果可以缓存在内存中,从而不需要读取HDFS,减少…

LeetCode 力扣 热题 100道(五)最长回文子串(C++)

最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串。 回文性 如果字符串向前和向后读都相同,则它满足 回文性 子字符串子字符串 是字符串中连续的 非空 字符序列。 动态规划法 class Solution { public:string longestPalindrome(string s) {i…

dropout层/暂退法

作用:正则化,缓解过拟合 实现方式: 在前向传播过程中,将该层的一部分神经元的输出特征随机丢掉(设为 0),相当于随机消灭一部分神经元仅在训练期间使用,测试时没有神经元被丢掉。 正…

【圆上的连线——卡特兰数】

题目 思路 因为不相交,所以每个点最多连出一条线,所以参与连线的点一定是偶数个 我们按照选出点的数量 2,4 …… 2x 将答案划分,答案可以表示为 (假设我们选出2x个点连线,假设方法数为 :2x个点参…

Pytest-Bdd-Playwright 系列教程(11):场景快捷方式

Pytest-Bdd-Playwright 系列教程(11):场景快捷方式 前言1. 手动绑定场景的传统方法2. 场景快捷方式的自动绑定方法2.1 绑定所有场景2.2 绑定多个路径2.3 自动与手动绑定的结合 3. 示例:结合 Playwright 的实际应用3.1 项目目录结构…

day-17 反转字符串中的单词

利用split()函数和substring函数 code: class Solution {public String reverseWords(String s) {int m0;while(s.charAt(m) ){m;}ss.substring(m);String arr[]s.split("[\\s]");int narr.length;String ss"";for(int in-1;i>1;i--){ssssarr[i]"…

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置:安装Isaac sim方案一:pip安装方案二:预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim,下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

力扣hot100-->二分查找

二分查找 1. 33. 搜索旋转排序数组 中等 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[…

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签 17 HTML&CSS简介 今日目标&#x…

倍福PLC数据 转 IEC61850项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 设置倍福PLC 5 配置网关参数采集倍福PLC数据 6 用IEC61850协议转发数据 7 网关使用多个逻辑设备和逻辑节点的方法 8 案例总结 1 案例说明 设置倍福PLC&#xff0c;开通ADS通信设置网关采集倍福PLC数据把采集的数据转…

代码辅助工具 GPT / Cursor

代码辅助工具 GPT / Cursor 文章说明GPT辅助效果第一次提问效果第二次提问效果第三第四次提问效果手动微调布局和宽高的效果第五次要求添加主题切换效果第六次提问--继续让它优化主题切换的效果第七次提问--修改主题切换的按钮位置并添加动画提问词第一次提问词第二次提问词第三…

FPGA 常用 I/O 电平标准有哪些?

在 FPGA 的神奇世界里&#xff0c;I/O 电平标准就像魔法咒语&#xff0c;掌控着芯片与外界交流的方式。对于初涉 FPGA 领域的小白来说&#xff0c;这些标准可能有点神秘莫测&#xff0c;但别担心&#xff0c;今天我就用最通俗易懂的方式为你揭开它们的面纱。 一、电平标准的魔…

网络协议(4)拥塞控制

之前已经说过了tcp也是会考虑网络的情况的&#xff0c;也就是当网络出现问题的时候tcp不会再对报文进行重传。当所有的用户在网络不好的时候都不会对丢失的报文进行重传。这样就会防止网络瘫痪。 这样的机制也就是tcp会进行拥塞控制。 拥塞控制 所谓的慢启动看下面这张图就能…

#define定义宏(2)

大家好&#xff0c;今天给大家分享两个技巧。 首先我们应该先了解一下c语言中字符串具有自动连接的特点。注意只有将字符串作为宏参数的时候才可以把字符串放在字符串中。 下面我们来讲讲这两个技巧 1.使用#&#xff0c;把一个宏参数变成对应的字符串。 2.##的作用 可以把位…

蓝桥杯每日真题 - 第17天

题目&#xff1a;&#xff08;最大数字&#xff09; 题目描述&#xff08;X届 C&C B组X题&#xff09; 题目分析&#xff1a; 操作规则&#xff1a; 1号操作&#xff1a;将数字加1&#xff08;如果该数字为9&#xff0c;变为0&#xff09;。 2号操作&#xff1a;将数字减…

Leetcode打卡:最少翻转次数使二进制矩阵回文I

执行结果&#xff1a;通过 题目&#xff1a;3239 最少翻转次数使二进制矩阵回文I 给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#…