“元组“名称的由来

文章目录

  • "元组"名称的由来
    • [1. 词源学角度](#1. 词源学角度)
    • [2. 数学中的起源](#2. 数学中的起源)
      • [2.1 笛卡尔积(Cartesian Product)](#2.1 笛卡尔积(Cartesian Product))
      • [2.2 n元组(n-tuple)](#2.2 n元组(n-tuple))
    • [3. 数据库理论中的元组](#3. 数据库理论中的元组)
    • [4. 编程语言中的演变](#4. 编程语言中的演变)
      • [4.1 Lisp语言(1958年)](#4.1 Lisp语言(1958年))
      • [4.2 ML语言(1973年)](#4.2 ML语言(1973年))
      • [4.3 Python中的元组](#4.3 Python中的元组)
    • [5. "元组" vs "列表" 的哲学差异](#5. "元组" vs "列表" 的哲学差异)
    • [6. 命名对比:其他语言的叫法](#6. 命名对比:其他语言的叫法)
    • [7. 为什么不是其他名字?](#7. 为什么不是其他名字?)
    • [8. 实际代码示例:体现"元组"本质](#8. 实际代码示例:体现"元组"本质)
      • [8.1 坐标系统(几何意义)](#8.1 坐标系统(几何意义))
      • [8.2 数据库记录(关系意义)](#8.2 数据库记录(关系意义))
      • [8.3 函数多返回值(计算意义)](#8.3 函数多返回值(计算意义))
    • [9. 学术文献中的定义](#9. 学术文献中的定义)
    • [10. 与类型理论的关系](#10. 与类型理论的关系)
    • [11. 历史趣闻](#11. 历史趣闻)
    • [12. 总结](#12. 总结)

"元组"名称的由来

"元组"这个名称来源于数学和计算机科学领域,下面详细解释它的起源和含义:

1. 词源学角度

"元组"是英文 "tuple" 的翻译:

  • "tuple" 来自 "n-tuple",其中 "n" 表示元素的数量
  • 后缀 "-tuple" 来源于拉丁语的 "-plus"(表示倍数)
  • 数学中的 "tuple" 指代 有序的元素集合
  • 中文翻译 "元组" 中:
    • "元" 表示 元素(element)
    • "组" 表示 组合集合
    • 合起来就是 "元素的组合"

2. 数学中的起源

在数学中,元组的概念有明确的定义:

2.1 笛卡尔积(Cartesian Product)

数学 复制代码
如果 A = {1, 2}, B = {3, 4}
那么 A × B = {(1,3), (1,4), (2,3), (2,4)}
这里的 (1,3), (1,4) 等就是二元组

2.2 n元组(n-tuple)

  • 0元组 :空元组 ()
  • 1元组 :单元素元组 (a)
  • 2元组 :有序对 (a, b) - 也叫 有序偶序偶
  • 3元组 :三重元组 (a, b, c)
  • n元组 :n个元素的有序序列 (a₁, a₂, ..., aₙ)

3. 数据库理论中的元组

在关系数据库中,"元组"有特定的含义:

sql 复制代码
-- 数据库表的一行就是一个元组
SELECT * FROM employees;

-- 结果示例:
-- | id | name  | age | department |
-- |----|-------|-----|------------|
-- | 1  | Alice | 30  | Sales      |  ← 这就是一个元组
-- | 2  | Bob   | 25  | IT         |  ← 另一个元组

在数据库术语中:

  • 关系(Relation) = 表(Table)
  • 属性(Attribute) = 列(Column)
  • 元组(Tuple) = 行(Row)

4. 编程语言中的演变

4.1 Lisp语言(1958年)

Lisp是最早使用类似元组概念的语言之一:

lisp 复制代码
; Lisp中的列表可以包含不同类型
'(1 "hello" 3.14)  ; 这是一个包含多种类型的列表

虽然Lisp叫"列表",但它实际上更接近元组的概念。

4.2 ML语言(1973年)

ML语言正式引入了元组类型:

sml 复制代码
(* Standard ML中的元组 *)
val point = (10, 20)        : int * int
val mixed = (1, "hello", 3.14) : int * string * real

这里的 * 表示类型乘积,形成了元组类型。

4.3 Python中的元组

Python继承了这一传统:

python 复制代码
# Python 1.x (1994年) 就有元组
point = (10, 20)  # 二元组
mixed = (1, "hello", 3.14)  # 三元组

5. "元组" vs "列表" 的哲学差异

特性 元组 (Tuple) 列表 (List)
数学背景 来自n元组,强调结构 来自序列,强调集合
哲学含义 坐标记录关系 容器集合序列
典型用途 点的坐标、数据库记录、函数多返回值 数据集合、可变序列
类比 类似结构体(struct) 类似数组(array)

6. 命名对比:其他语言的叫法

不同编程语言对类似概念的命名:

语言 名称 含义
Python Tuple (元组) 不可变的有序序列
C++ std::tuple 固定大小的异构容器
Haskell Tuple 固定长度的异构序列
Scala Tuple 同C++/Haskell
Rust Tuple 固定大小的异构值集合
Java 没有内置,可用PairTriple 通过库实现
JavaScript Array (但可包含不同类型) 动态类型,实际上类似元组
Swift Tuple 轻量级的数据分组
Kotlin Pair、Triple 专门用于2个或3个元素
Go 没有内置,但可返回多个值 通过函数多返回值实现

7. 为什么不是其他名字?

为什么选择"元组"而不是其他名称?

  1. 不是"记录"(Record)

    • 记录通常有关联的字段名
    • 元组按位置访问,记录按名称访问
  2. 不是"结构体"(Struct)

    • 结构体需要预定义类型
    • 元组可以快速创建临时结构
  3. 不是"数组"(Array)

    • 数组通常是同质的(相同类型)
    • 元组是异质的(不同类型)
  4. 不是"序列"(Sequence)

    • 序列强调顺序性
    • 元组强调结构性(固定大小、不同类型)

8. 实际代码示例:体现"元组"本质

8.1 坐标系统(几何意义)

python 复制代码
# 2D坐标点 - 典型的二元组
point_2d = (10, 20)

# 3D坐标点 - 三元组
point_3d = (10, 20, 30)

# RGB颜色 - 三元组
color_rgb = (255, 128, 0)

# 这些都是数学中的"点",在数学中用坐标表示

8.2 数据库记录(关系意义)

python 复制代码
# 员工记录 - 四元组
employee = (1001, "Alice", "Engineer", 75000)

# 这对应关系数据库中的一行
# (员工ID, 姓名, 职位, 薪水)

8.3 函数多返回值(计算意义)

python 复制代码
def divide(a, b):
    quotient = a // b
    remainder = a % b
    return quotient, remainder  # 返回二元组

result = divide(17, 5)  # (3, 2)
# 这表示一个除法运算的完整结果

9. 学术文献中的定义

在计算机科学文献中,元组通常被定义为:

"一个有序的有限的元素序列,其中每个元素可以来自不同的类型域。"

关键特征:

  1. 有序性(a, b) ≠ (b, a)(除非 a = b
  2. 有限性:有固定数量的元素
  3. 异构性:元素类型可以不同
  4. 结构性:整体被视为一个复合值

10. 与类型理论的关系

在类型理论中,元组对应 乘积类型(Product Type):

  • 二元组类型T₁ × T₂
  • 三元组类型T₁ × T₂ × T₃
  • n元组类型T₁ × T₂ × ... × Tₙ

乘积类型的值就是元组。

11. 历史趣闻

  1. "tuple"的发音

    • 英语中发音为 /ˈtuːpəl/ 或 /ˈtjuːpəl/
    • 源自"quintuple"(五倍)、"sextuple"(六倍)等词的后缀
    • "n-tuple"读作"en-tuple"
  2. 早期术语

    • 20世纪50年代:多使用"ordered pair"(有序对)
    • 20世纪60年代:开始使用"tuple"作为通用术语
    • 1970年代:在关系数据库理论中普及
  3. 中文翻译

    • 早期文献中曾译为"数组"(与array混淆)
    • 后来统一为"元组",强调"元素组合"
    • 台湾地区有时译为"组元"或"多元组"

12. 总结

"元组"这个名称体现了:

  1. 数学根源:来自n元组的概念
  2. 结构特性:固定大小的元素组合
  3. 有序性质:元素顺序重要
  4. 类型特征:支持不同类型组合
  5. 实用价值:轻量级的数据结构

所以,当你使用Python中的tuple或C++中的std::tuple时,你实际上在使用一个有着深厚数学和计算机科学背景的概念。这个名字准确地反映了它的本质:元素的组合(元 = 元素,组 = 组合)。

相关推荐
Silence_Jy1 小时前
deepseek-R1技术报告解析
python·深度学习·transformer
Eric.Lee20212 小时前
mujoco读取模型几何体属性
python·物理引擎·mujoco·物理仿真·构建物理几何体
子午2 小时前
【车辆车型识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积网络+resnet50算法
人工智能·python·深度学习
独行soc2 小时前
2025年渗透测试面试题总结-273(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
独行soc2 小时前
2025年渗透测试面试题总结-274(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
CHANG_THE_WORLD2 小时前
Python列表(List)介绍
windows·python·list
Byron Loong2 小时前
【Debug】vscode 调试python,如何配置固定调试文件
ide·vscode·python
qq_356196952 小时前
day31函数专题2:装饰器@浙大疏锦行
python
爱学习的梵高先生2 小时前
Python:变量
python