zoukankan      html  css  js  c++  java
  • Python中Tuple的词源有趣探索

    提出一个智商欠费的问题

    Tuple在Python中表示一种“大小固定的有序序列”。这是一条普世真理,毋庸置疑。

    为什么这个数据结构叫Tuple,而不是其他任何一个名字呢?
    我停下了在键盘上舞蹈的手指,被大脑抛出的这个疑问打蒙了。是啊,为什么呢?
    这好比在问,为什么这个模样的东西叫狗呢? 输入图片说明

    Tuple这个单词怎么来的

    先来看一组英文单词:

        monuple     (1倍,也称为single)   
        couple     (2倍,也称作double)
        triple      (3倍)
        quadruple  (4倍)
        quintuple   (5倍)
        sextuple    (6倍)
        .........
        centuple   (100倍)  
    

    这些表示倍数的单词都有一个共同的后缀-ple-ple来源于古拉丁文plus(更多的意思)。这些单词的前缀呢,有规律可循吗?它们本身就是规律,前缀是拉丁文的数字1234一直到100。
    拉丁文的123456如下:

         unus    1
         duo      2
         tres     3
         quattuor 4
         quinque  5
         sex      6
    

    后来,人们从这些单词里提取出一个更长的-tuple后缀,作为一个通用词根。

    -tuple
    1863, word-forming element abstracted from quintuple, etc.

    Tuple什么时候有了有序序列的含义 ?

    大约1950s,数学中出现了一个概念有序数对,表示为2-tuple。 中文翻译自它的另外一个更常用的名字 ordered pair。

    这是初中数学知识,“有序数对”是指有顺序的两个数a和b组成的数对,数学符号记作(a,b)。所谓有序,是指一个2-tuple的元素顺序是固定的,例如(a,b)和(b,a)是不同的有序数对。有序数对可以准确的表示平面上的一点,也就是坐标点喽(x,y)。
    3个有序数列怎么表示呢,可以嵌套表示,如(1,(2,3)),也可以直接写成(1,2,3)。 扩展到一般情况,n个有序数列,就被表示为n-tuple(n是正整数)。 把有序的元素写在“()”内,再用逗号分隔;例如(2,7,4,1,7)就表示一个5-tuple。
    至此,数学概念中tuple就诞生了。
    Ngram Viewer显示的1920年至今,词汇n-tuple和ordered pair 在英文出版书籍中的出现频率

    Tuple作为一种数据结构进入计算机科学

    计算机语言出现后,Tuple作为一种数据结构被引入了计算机科学领域。
    不止python,其他很多语言都有tuple结构,如Lisp,Scala,Swift等。在计算机语言中,Tuple的元素可以是任意数据类型,如int,string。
    所以,Tuple的重要特性长度不可变和元素有序,是因为tuple作为一个数学概念,本来就是定义一个有限且有序的序列。

    最后一个问题,为什么把tuple翻译成“元组”?

    感觉这个翻译挺别扭的,从字面上不如数组、列表好理解。也没办法问第一个翻译者的想法。我的理解是“元组”只表达了最基本的2-Tuple(二元组)的意义。 “元”的意思是“基本,初始”,“元组”意思是“基本组成”或“基本单元”。数据库中,把表的一行也成为元组,但是表的基本单元是数据项啊,这,也勉强可以理解吧。

    Tuple的特性本身也不复杂,不需要这样大费周折的去理解。写这篇文章只为了满足一个词源控的好奇心,就像我刚学Java时很想知道为什么<key,value>叫Map?为什么[1,1,2,3,5,8]叫Array。

    参考内容: Tuple Ordered_pair

  • 相关阅读:
    git 忽略文件 .gitignore 以及规则
    Syncovery : Google Docs protocol completely replaced with Google Drive
    Syncovery 是目前功能最为强大的实时自动备份工具
    FolderSync Instant sync 即时同步
    FolderSync :The various features and how to use them
    How do I use Tasker to run a sync in FolderSync?
    知识共享
    HowTo: Restart SSH Service under Linux / UNIX
    Node.js是一个事件驱动I/O服务端JavaScript环境
    WordPress 客户端软件列表
  • 原文地址:https://www.cnblogs.com/lukeguo/p/8824764.html
Copyright © 2011-2022 走看看