11.python中的元祖

  按照我之前惯用的学习方法,首先还是先来 help(tuple) 看看其内置方法有哪些。

Help on class tuple in module __builtin__:

class tuple(object)
 |  tuple() -> empty tuple
 |  tuple(iterable) -> tuple initialized from iterable‘s items
 |
 |  If the argument is a tuple, the return value is the same object.
 |
 |  Methods defined here:
 |
 |  __add__(...)
 |      x.__add__(y) <==> x+y
 |
 |  __contains__(...)
 |      x.__contains__(y) <==> y in x
 |
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |
 |  __ge__(...)
 |      x.__ge__(y) <==> x>=y
 |
 |  __getattribute__(...)
 |      x.__getattribute__(‘name‘) <==> x.name
 |
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |
 |  __getnewargs__(...)
 |
 |  __getslice__(...)
 |      x.__getslice__(i, j) <==> x[i:j]
 |
 |      Use of negative indices is not supported.
 |
 |  __gt__(...)
 |      x.__gt__(y) <==> x>y
 |
 |  __hash__(...)
 |      x.__hash__() <==> hash(x)
 |
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |
 |  __le__(...)
 |      x.__le__(y) <==> x<=y
 |
 |  __len__(...)
 |      x.__len__() <==> len(x)
 |
 |  __lt__(...)
 |      x.__lt__(y) <==> x<y
 |
 |  __mul__(...)
 |      x.__mul__(n) <==> x*n
 |
 |  __ne__(...)
 |      x.__ne__(y) <==> x!=y
 |
 |  __repr__(...)
 |      x.__repr__() <==> repr(x)
 |
 |  __rmul__(...)
 |      x.__rmul__(n) <==> n*x
 |
 |  count(...)
 |      T.count(value) -> integer -- return number of occurrences of value
 |
 |  index(...)
 |      T.index(value, [start, [stop]]) -> integer -- return first index of value.
 |      Raises ValueError if the value is not present.
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T

tuple

  可以看见元祖的内置方法好像有点少,总体可分为下面几种:

  1.序列相关的操作,如索引,切片,加法,乘法,成员运算等。(这些都在我前一篇python的序列中博文中讲过了,这里不再重复)

  2.内置函数相关(按照惯例,内置函数将另起一篇总结,这里暂时忽略)

  3.大于、小于、等于等比较运算符

  4.普通内置方法2个。

  所以去除讲过的和暂时不讲的,就还要2个部分要讲了,下面看分析。



1.元祖中大于、小于、等于等比较运算符

  元祖之间的大小应该怎么比较呢?

  其实很简单,总结起来就一句话,按照索引取出里面的元素逐一比较。

  当 a 和 b 两个元祖比较的时候,首先都取出其第一个元素,这里第一个元素都是字符串,那么就按照字符串的比较方式,逐个字符比较。而 ‘s‘ 比 ‘a‘ 大,所以元祖 a 大于元祖 b 。也就是说,只要当其中一个元素大于另一个,那么整个元祖就比另一个大,这和元素的数量无关。

  这里可以总结元祖比较的规则是:

    元祖之间按照索引逐一取出相应位置的元素,让元素之间进行比较,如果取出的元素相等,则比较下一个元素,直到分出大小为止。如果比较完所以的元素还是相等,那么两个元祖相等。

  其实元祖的比较就像比赛打擂台,双方各派出一名选手,如果某个选手赢了,那这个选手所在的队伍就获得了胜利,如果未分胜负则双方再派出下一个选手,如果双方到最后都没有分出胜负的话,就只能握手言和了。

  但如果是这样的情况:

  虽然前面是未分胜负,但是我多一个,就算这个是空字符串什么都好。这种情况就相当于和一个空对象 None 相比,而空对象 None 是最小的,和最小的相比肯定要大于它。

  有些同学可能会疑惑如果元素的数据类型不同要怎么比较,例如字符串和数字怎么比较,这部分就要参照我在python的数字中关于比较运算符的总结了:戳这里



2.普通的内置方法2个

  2.1  T.count(value) -> integer

    返回 value 在元祖中出现的次数(计数器),如果没找到的话则返回0。

    

  2.2 T.index(value, [start, [stop]])

    返回 value 在元祖中的给定范围内的第一个索引,如果没找到则触发ValueError错误。

    

    有多个时找到第一个,可以通过索引指定范围,索引超过了python也会优雅地处理掉。但指定范围并不意味着重新计算索引,索引还是从整个元祖的开头计算的。

    

    没找到的报错,注意这里的 ‘123‘ 是字符串,别搞混了。



  好了,关于元祖的内置方法就讲完了,这时候就会有同学说:教练,你怎么能这么

  好吧,确实有点短,那我在这里就谈谈我个人对于元祖的理解吧。

  首先,我在python的序列中已经证明了元祖中的每个元素都是一个对象了吧(没看的同学回去看),那么元祖是不是就类似于一个容器,容器里面放了一系列的对象。而当我们说元祖是不可变的,是不是就意味着这个容器的大小是固定的。但这个说法还不够完善,因为我可以在里面放各种对象,例如我放一个列表,而列表的大小是可以改变的。如果我不断地增大列表,而列表又放在了元祖这个容器里,是不是有一天列表会占满这个容器,这时候就不能在增大列表了?

  肯定不是的,所以更形象的比喻应该是把元祖当成是一个菜单,这个菜单的页数是固定的。菜单里的每一道菜都有一个标号,也就是索引,但这个菜单比较特别,我不仅可以点菜,我还可以通过这个菜单去点另一个菜单,而得到另一个菜单再怎么添加页数也与原来的那个菜单无关。

  这就是我个人对于元祖的理解。

  好了,关于元祖就先说到这里,浓缩就是精华,就算短了点还不是干货满满。

  这么好的文章,你怎么能不点个赞呢?

  真是心累,明明感觉自己写得不错,结果博客里面一片冷清,再这样下去我可是要得五月病的,什么,已经到五月底了?

时间: 2024-07-29 03:48:05

11.python中的元祖的相关文章

python中的元祖与字典

元祖的介绍 python中的元祖与列表类似,不同之处在于元祖的元素不可修改.元祖使用小括号,列表使用方括号 <1>访问元祖                                    执行结果: <2>修改元祖                                         执行结果: 说明:python中不允许修改元祖的数据,包括不能删除其中的值 <3>元祖的内置函数count.index index和count与字符串和列表中的用法相同 例

在python中对元祖进行排序

在python里你可以对一个元组进行排序.例子是最好的说明: >>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] >>> sorted(items) [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')] 默认情况下内置的sort和sorted函数接收的参数是元组时,他将会先按元组的第一个元素进行排序再按第二个元素进行排序. 然而,注意到结果中(0,

深刻理解Python中的元类

译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了985点的赞同点数,更有人评论说这段回复应该加入到Python的官方文档中去.而e-satis同学本人在Stack Overflow中的声望积分也高达6

深刻理解Python中的元类(metaclass)以及元类实现单例模式

深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例模式的那一节有些疑惑.因此花了几天时间研究下元类这个概念.通过学习元类,我对python的面向对象有了更加深入的了解.这里将一篇写的非常好的文章基本照搬过来吧,这是一篇在Stack overflow上很热的帖子,我看http://blog.jobbole.com/21351/这篇博客对其进行了翻译. 一.理解

Python中的元类(metaclass)

推荐+收藏:深刻理解Python中的元类(metaclass) 做一些笔记学习学习: 在大多数编程语言中,类就是用来描述如何生成一个对象的代码段,在Python中类也是一个对象,这个(类)对象自身拥有创建对象(类实例)的能力. 因为它的本质是一个对象: 可以将它赋值给一个变量 可以拷贝它 增加属性 作为参数进行传递 可以在运行时动态地创建他们,可以在函数中创建类,只需要使用class关键字即可 当使用class关键字的时候,Python解释器会自动地创建这个对象,Python还提供了手动处理的方

1.6小白学python入门基础-----元祖,字典,集合

今日课程内容 一,元祖 二.字典 三.集合 一.元祖 1.1元祖的定义: 元祖使用()元素用逗号隔开的一系列元素. #ti=(1,0) #t3=tuple((1,2)) #t4=()#空元素 #t5=(1,)#一个元素 1.2元祖的特性: 1.有序存储,可以存储多个数据 2.不可变(注意:内部可以包含对象,可变对象依旧可变) 1.3元祖的常用操作: 1.因为有序存储所以可以通过索引取值 2.切片 3.len(item元素的个数) 1.4内置方法: #print(t.count)#表示该数据集合可

16、python基础学习-元祖

1 #!/usr/bin/env python 2 #__author: hlc 3 #date: 2019/5/26 4 #元祖被称为只读列表,即数据可以被查询,不能被修改,切片的方式同样适用于元祖 5 #元祖写在小括号里面,使用逗号隔开,元祖中可以包含列表,不想被修改可以使用元祖 6 #元祖中一个值也需要在后面添加一个逗号,(3,) 7 8 # a = (1,2,3,4,5,6,7) 9 # b = a[0:3] #对元祖a进行切片 10 # print(b) #(1, 2, 3) 11 1

深刻理解Python中的元类(metaclass)

译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了985点的赞同点数,更有人评论说这段回复应该加入到Python的官方文档中去.而e-satis同学本人在Stack Overflow中的声望积分也高达6

深刻理解Python中的元类metaclass(转)

本文由 伯乐在线 - bigship 翻译 英文出处:stackoverflow 译文:http://blog.jobbole.com/21351/ 译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程.于是e-satis同学给出了神一般的回复,该回复获得了9