zoukankan      html  css  js  c++  java
  • Python学习笔记(六)Python组合数据类型

      在之前我们学会了数字类型,包括整数类型、浮点类型和复数类型,这些类型仅能表示一个数据,这种表示单一数据的类型称为基本数据类型。然而,实际计算中却存在大量同时处理多个数据的情况,这种需要将多个数据有效组织起来并统一表示,这种能够表示多个数据的类型称为组合数据类型

    一、组合数据类型概述

    组合数据类型更能够将多个同类或不同类型组织起来,通过单一的表示使数据更有序、更容易。根据数据之间的关系,组合数据类型可以分为3类:序列类型、集合类型和映射类型

    序列类型是一个元素向量,元素之间的存在先后关系,通过序号访问,元素之间不排他。

    集合类型是一个元素类型,元素之间无序,相同元素在集合中唯一存在。

    映射类型是“键-值”数据项的组合,每个元素是一个键值对,表示为(key, value)。

    1.序列类型

    序列类型是一堆元素向量,元素之间存在先后关系,通过序号访问。

    Python中有很多数据类型都是序列类型,其中比较重要的是str(字符串)、tuple(元组)list(列表)可以看成是单一字符的有序序列,属于序列类型。

    序列类型有12个通用的操作符和函数

    操 作 符 描         述
    x in s 如果x是是的元素,返回True,否者返回False
    x not in s 如果x不是s的元素,返回True,否则返回False
    s + t 连接S和t
    s * n 或  n * s 将序列s复制n次
    s[i] 索引,返回序列的第i个元素
    s[i:j] 分片,返回包含序列s第i到j个元素的子序列(不包含第j个元素)
    s[i:j:k] 步骤分片,返回包含序列s第i到j个元素以k为步数的子序列
    len(s) 序列s的元素个数(长度)
    min(s) 序列s中的最小元素
    max(s) 序列s中的最大元素
    s.index(x(,i[,j])) 序列s中从i开始到j位置中第一次出现的元素x的位置
    s.count(x) 序列中出现x的总次数

    元组(tuple)是序列类型中比较特殊的类型,因为它一旦创建就不能被修改。Python中元组采用逗号和圆括号(可选)来表示,如:

    >>>creature = "cat", "dog", "tiger", "bear"
           print(creature)
    >>>('cat', 'dog', 'tiger', 'bear')

    >>>creature = "cat", "dog", "tiger", "bear"
      all=(1,2,456,creature)  #元组中包含元组creature
      print(all)
      print(all[2])
      print(all[-1][2])
    >>>(1, 2, 456, ('cat', 'dog', 'tiger', 'bear'))
    >>>456
    >>>tiger

    其中,一个元组可以作为另一个元组的元素,可以采用多级索引获取信息,例如上面的元组all中包含了元组creature,可以用all[-1][2]获取对应元素值。

    元组除了用于表达固定数据外,还常用于以下3种情况:函数多返回值、多变量同步赋值、循环遍历,例如:

    >>>def func(x):          #函数多返回值      
               return x,x*x;   

    >>>a,b = 'dog','cat'  #多变量同步赋值

    >>>import math        #循环遍历
      for x,y in ((1,0),(2,5),(3,8)):
        print(math.hypot(x,y))    #求多个坐标值到原点的距离

    2.集合类型

    集合类型与数学中集合的概念一致,即包含0个或多个数据项的无序组合。

    集合中的元素不可重复,元素类型只能是固定数据类型,例如集合、浮点数、字符串、元组等,列表、字典、和集合类型本身都是可变数据类型,不能作为集合的元素出现。

    由于集合是无序组合,它没有索引和位置的概念,不能分片,集合中元素可以动态增加和删除。集合用大括号({})表示,可以用赋值语句生成一个集合,例如:

    >>>S={100,200,(666,25),"YES",458}
            print(S)
    >>>{100, 200, 458, 'YES', (666, 25)}

    从上面可以看出,由于集合的元素是无序的,集合的打印效果与定义顺序可以不一致。

    集合类型有10个操作符

    操 作 符 描    述
    S-T 或 S.difference(T) 返回一个新集合,包括在集合S中但不在集合T中的元素
    S-=T 或 S.difference_update(T) 更新集合S,包括在集合S中但不在集合T中的元素
    S & T 或 S.intersection(T) 返回一个新集合,包括同时在集合S和T中的元素
    S&=T 或 S.intersection_update(T) 更新集合S,包括同时在集合S和T中的元素
    s=^T 或 S.symmetric-difference(T) 返回一个新集合,包括集合S和T中的元素,但不包括同时在其中的元素
    s=^T 或 S.symmetric-difference_update(T) 更新集合S,包括集合S和T中的元素,但不包括同时在其中的元素
    S|T 或 S.union(T) 返回一个新集合,包括集合S和T中的所有元素
    S=|T 或 S.update(T) 更新集合S,包括集合S和T中的所有元素
    S<=T 或 S.update(T) 如果S和T相同或S是T的子集,返回True,否则返回False,可以用S>T判断S是否是T的真子集
    S>=T 或 S.issuperset(T) 如果S和T相同或S是T的超集,返回True,否则返回False,可以用S>T判断S是否是T的真超集

    集合类型与其他类型最大的不同在于它不包含重复元素,因此,当需要对一维数据进行去重或进行数据重复处理时,一般通过集合来完成。

    3.映射类型 

    映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。

    键(key)表示一个属性,也可以理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。

    在Python中,映射类型主要以字典(dict)体现。

    二、列表类型和操作

    列表是包含0个或多个对象引用的有序序列,没有长度限制,可自由增删元素,使用灵活。

    1.列表类型的概念

    列表(list)是包含0个或多个对象引用的有序序列,属于序列类型。与元组不同,列表的长度和内容都是可变的,可自由对列表中的数据项进行增加、删除或替换

    2.列表类型的操作

    函数或方法 描述
    ls[i] = x 替换类表 ls 第 i 数据项为 x
    ls[i:j] =l t 用列表 lt 替换列表 ls 中第 i 到第 j 项数据(不含第 j 项)
    ls[i:j:k] = lt 用列表 lt 替换列表 ls 中第 i 到第j项以k为步数的数据(不含第j项)
    del ls[i:j] 删除列表 ls 第i到第 j 项数据,等价于ls[i:j]=[]
    del ls[i:j:k] 删除列表 ls 第 i 到第 j 项以 k 为步数的数据
    ls += lt 或 ls.extend(lt) 将列表 lt 元素增加到列表 ls 中
    ls *= n 更新列表 ls,其元素重复 n 次
    ls.append(x) 在列表 s 最后增加一个元素 x
    ls.clear() 删除 ls 中的所有元素
    ls.copy() 生成一个新列表,复制 ls 中的所有元素
    ls.insert(i,x) 在列表 ls 的第 i 位置增加元素 x
    ls.pop(i) 将列表 ls 中的第 i 项元素取出并删除该元素
    ls.remove(x) 将列表中出现的第一个元素 x 删除
    ls.reserve(x) 列表 ls 中的元素反转

    三、字典类型和操作

    列表是存储和检索数据的有序序列。当访问列表中的元素时,可以通过整数的索引来查找它,这个索引时元素在列表中的符号,列表的索引模式是“<整数序号>查找<被索引内容>”

    1.字典类型的概念

    通过任意键信息查找一组数据中值信息的过程叫做映射,Python语言中通过字典实现映射。Python语言中的字典可以通过大括号({})建立,建立模式如下:

    {<键1>:<值1>, <键2>:<值2>, ... ,<键n>:<值n>}

    其中,键和值通过冒号连接,不同键值对通过逗号隔开。

    例如:

    >>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"}
           print(Dic)
           print(Dic["中国"])    
    >>>{'中国': '北京', '美国': '华盛顿', '法国': '巴黎'}
    >>>中国

    一般来说,字典中键值对的访问模式如下,采用中括号格式:

    <值> = <字典变量> [<键>]

    2.字典类型的操作

    与列表类似Python字典也有非常灵活的操作方法。使用大括号可以创建字典,并指定初始值,通过中括号可以增加新的元素,例如:

    >>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"}
           Dic{"英国"}="伦敦"
           print(Dic)
    >>>{"中国":"北京","美国":"华盛顿","法国":"巴黎","英国":"伦敦"}

    注意:直接使用大括号({})生成一个空的字典。生成空集合需要使用函数set()。

    字典类型的函数和方法:

    函数和方法 描     述
    <d>.keys() 返回所有的键信息
    <d>.values() 返回所有的值信息 
    <d>.items() 返回所有的键值对 
    <d>.get(<key>,<default>) 键存在则返回相应值,否则返回默认值 
    <d>.pop(<key>,<default>) 键存在则返回返回值,同时删除键值对,否则返回默认值 
    <d>.popitem() 随机从字典中取出一个键值对,以元组(key,value)形式返回 
    <d>.clear()  删除所有的键值对 
     del<d>[<key>]  删除字典中某一个键值对 
     <key>in<d> 如果键在字典中返回True,否则返回False 

    与其他组合类型一样,字典可以通过for-in语句对其元素进行遍历,例如:

    >>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"}
           for i in Dic:
               print(i)
    >>>中国
       美国
       法国

    所以,字典有以下一些基本原则:

    (1)字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信息。

    (2)字典中元素以键信息为索引访问。

    (3)字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。

  • 相关阅读:
    501. Find Mode in Binary Search Tree
    [leetcode]Evaluate Reverse Polish Notation
    [leetcode]LRU Cache
    [mock]12月27日
    [mock]12月28日
    [leetcode]Max Points on a Line
    *[topcoder]JumpFurther
    [mock]12月11日
    *[topcoder]GUMIAndSongsDiv1
    [leetcode]Reorder List
  • 原文地址:https://www.cnblogs.com/Y-xp/p/11733995.html
Copyright © 2011-2022 走看看