Swift51.com
麦子学院 头像
麦子学院  2017-04-28 23:23

Python学习之元组操作

回复:0  查看:2321  
本文和大家分享的主要是python 元组操作相关内容,一起来看看吧,希望对大家 学习python有所帮助。
  谈起元组,有了解的可能会觉得这个类型跟列表是非常相似的,操作方面也基本雷同,不过他们本质的区别是,元组是不可变数据类型,还记得我们之前提到过的字符串也是不可变数据类型吗?让我们再回顾下什么是不可变性,不可变性就是一旦一个对象被定义了,它的值就不能再本更新,除非是重新创建一个新的对象,那元组跟字符串的区别是,元组是一个容器对象,它可以包含一个或多个元素,基本特性我们  就介绍了这里,接下来我们看看具体的一些例子:
  1 、元组创建
  >>> t = ()>>> t
  ()>>> t = (1,2,3)>>> t
  (1, 2, 3)
  这里第一行就创建了一个空的元组,然后创建了一个保护三个元素的元组,元组的创建在这里要注意一点,如果你的元组里只有一个元素,要采用元素后加一个逗号的方式来表示,这个叫单元素元组,直接用(元素)的方式是不行的,例子如下:
  >>> t = ('a')>>> t'a'>>> t = ('a',)>>> t
  ('a',)
  2 、获取元组值
  前面我们说过,元组的数据类型跟列表基本一样,它也支持切片,下标的方式去访问容器的值,例如:
  >>> t = ('abc', 20, ['f','g'])>>> t
  ('abc', 20, ['f', 'g'])>>> t[0] 'abc'>>> t[2][0]'f'>>> t[2][5]
  Traceback (mostrecentcalllast):
  File "", line 1,  in < module>IndexError: listindexoutofrange
  因为元组是容器类型,所以它也可以包含一个列表作为元素,访问值得时候可以通过切片方式访问其中的值,如果访问的值不存在就会显示超出索引范围的错误。
  3 、元组更新
  前面提到过因为元组是不可变类型,前面平时我们切片的操作也只是读取,不能够进行值得替换,否则会报错。
  >>> t[0]'abc'>>> t[0] = 'bcd'
  Traceback (mostrecentcalllast):
  File "", line 1,  in < module>TypeError: 'tuple' object doesnot supportitemassignment
  如果要改变元组只能新创建一个新的对象:
  >>> t
  ('abc', 20, ['f', 'g'])>>> id(t)139702583814576>>> t = ('abc', 20, ['f', 'g', 'h'])>>> t
  ('abc', 20, ['f', 'g', 'h'])>>> id(t)139702583814096
  通过id() 函数就可以看出我们创建了一个新的对象, id() 函数官方解释如下:
   Return the “identity” ofanobject. This  is aninteger ( or long integer) whichis guaranteedto beuniqueand constantfor this object duringitslifetime. Twoobjectswithnon-overlappinglifetimesmayhavethesameid() value.
  CPythonimplementationdetail: This  is theaddressoftheobject  in memory.
  简单来说就是返回这个对象生命周期的一个唯一标示。
  除了重新赋值,元组也支持“+” 字符的操作,通过 + 字符可以把两个元组连接起来生成一个新的元组。
  >>> t1 = ('xyz', 10)>>> t
  ('abc', 20, ['f', 'g', 'h'])>>> t1
  ('xyz', 10)>>> t2 = t + t1>>> t2
  ('abc', 20, ['f', 'g', 'h'], 'xyz', 10)
  关于元组的元素更新,还有一个特别的地方,就是虽然元组是不可变类型,但它包含的元素如果是可变对象,就可以改变其中的值,假如一个元组中包含一个列表,那这个列表中的值是可以变化的。
  >>> t2
  ('abc', 20, ['f', 'g', 'h'], 'xyz', 10)
  >>> t2[2][1]
  'g'
  >>> t2[2][1]='o'
  >>> t2
  ('abc', 20, ['f', 'o', 'h'], 'xyz', 10)
  3 、列表和元组互转
  如果有一个列表要转成元组,可以直接通过tuple() 函数操作,如果元组要转成列表可通过 list() 函数操作,有了这 2 个函数,这两个容器类型的数据结构转换非常 方便。
  >>> t
  ('abc', 20, ['f', 'o', 'h'])>>>
  >>> list(t)
  ['abc', 20, ['f', 'o', 'h']]>>> tl = list(t)>>> tl
  ['abc', 20, ['f', 'o', 'h']]>>>
  >>>
  >>> t = tuple(tl)>>> t
  ('abc', 20, ['f', 'o', 'h'])
  除了这2 个函数,还有一些常用的例如 max(),min(),len() 等函数。
来源:mindg