[PY3]——内置数据结构(2)——元组及其常用操作

定义和初始化

#tuple()          使用工厂函数tuple定义一个空元组

#()               使用圆括号定义一个空元组

#(1,2,3)          使用圆括号定义有初始值的元组

#tuple(可迭代对象)  把可迭代对象转换为一个元组

In [1]: tup=tuple();print(tup)
()

In [2]: tup=();print(tup)
()

In [3]: tup=(1,2,3);print(tup)
(1, 2, 3)

In [5]: tup=tuple(range(0,2));print(tup)
(0, 1)

#要定义一个只有1个元素的tuple,如果这么定义:
In [30]: tup=(1)
In [31]: type(tup)
Out[31]: int  
#定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。 #所以只有1个元素的tuple定义时必须加一个逗号,,来消除歧义 In [32]: tup=(1,) In [33]: type(tup) Out[33]: tuple In [34]: print(tup) (1,) # Python在显示只有1个元素的tuple时,也会加一个逗号,,以免误解成数学计算意义上的括号

 

元组是不可修改的

 

访问元组元素

1. 通过索引访问元素

In [7]: t=tuple(range(0,7));print(t)
(0, 1, 2, 3, 4, 5, 6)

In [8]: t[1]
Out[8]: 1

In [9]: t[-1]
Out[9]: 6

2. index()

In [21]: help(t.index)
index(...) method of builtins.tuple instance
    T.index(value, [start, [stop]]) -> integer -- return first index of value.
    Raises ValueError if the value is not present.

In [16]: print(t)
(1, 2, 3, 2, 6)

In [17]: t.index(2)
Out[17]: 1

In [20]: t.index(2,1,3)
Out[20]: 1

3. count()

In [21]: help(t.count)
count(...) method of builtins.tuple instance
    T.count(value) -> integer -- return number of occurrences of value

In [22]: t.count(2)
Out[22]: 2

 

命名元组 nametuple

# namedtuple('名称', [属性list]):
# namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。
# 这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。

# 例如我们可以使用namedtuple来表示坐标:
In [35]: from collections import namedtuple

In [36]: Circle=namedtuple('Circle',['x','y','z'])

In [37]: C=Circle(2,2,3)

In [38]: print(C.x);print(C.z)
2
3

# 创建的Circle对象是tuple的一种子类
In [39]: isinstance(C,Circle)
Out[39]: True

In [40]: isinstance(C,tuple)
Out[40]: True

# 所以C完全可以当做元组去使用
In [46]: C.index(2)
Out[46]: 0

In [47]: print(C[1])
2

In [48]: C.count(2)
Out[48]: 2

 

#列表和元组的异同?
#<相同点>
   列表和元组都是容器,可以包含任意类型的元素(甚至是包含一个序列)
   列表和元素也都包含元素的顺序
#<差别>
    列表是可变的,元组是不可变的
    所以通常,在你有一些不确定长度的相同类型队列时使用列表
    在已知元素数量的情况下用元组

 










posted @ 2017-03-17 12:25  Jelly_lyj  阅读(136)  评论(0编辑  收藏  举报