- #序列类型
- #Python提供了5种内置的序列类型:bytearray、bytes、list、str、tuple
- #Python标准库中还提供了其他一些序列类型,最值得注意的是collections.namedtuple。
- #元组
- #元组是个有序序列,其中包含0个或多个对象引用。
- #元组支持与字符串一样的分片与的语法,这使得从元组中提取项比较容易。
- #与字符串类似,元组也是固定的,因此,不能替换或删除其中包含的任意数据项。
- #如果需要修改有序序列,我们应该使用列表而非元组。
- #如果需要对一个元组对齐进行修改,那么可以用list()转换函数将其转换为列表,
- #之后在产生的列表之上进行适当修改。
- # tuple()在不指定参数的时候将返回一个空元组,
- #包含一个或多个项的元组可以使用逗号分隔进行创建。
- #元组只提供了两种方法:
- #t.count(x),返回对象x在元组中出现的次数;
- #t.index(x),返回对象在元组t中出现的最左边位置,在元组中不包含x时,产生ValueError异常
- #此外元组可以使用操作符+(连接)、*(赋值)与[](分片),也可以使用in与not in来测试成员关系。
- #虽然元组是固定对象,但+=与*=这两个增强的赋值运算符也可以使用,
- #实际上是Python创建了新的元组,用于存放结果,并将左边的对象引用设置为指向新元组。
- #元组可以使用标准的比较操作符(<、<=、==、!=、>=、>)进行比较,
- #这种比较实际上逐项进行的(对嵌套项,如果元组内的元组,递归进行处理)
- >>> hair = "black", "brown", "blonde", "red"
- >>> hair[2]
- 'blonde'
- >>> hair[-3:]
- ('brown', 'blonde', 'red')
- >>> hair[:2], "gray", hair[2:]
- (('black', 'brown'), 'gray', ('blonde', 'red'))
- >>> hair[:2] + ("gray",) + hair[2:]
- ('black', 'brown', 'gray', 'blonde', 'red')
- >>> eyes = ("brown", "hazel", "amber", "green", "blue", "gray")
- >>> colors = (hair, eyes)
- >>> colors[1][3:-1]
- ('green', 'blue')
- #[]分片操作符可以应用于一个分片,必要时可用使用多个
- >>> things = (1, -7.5, ("pea", (5, "Xyz"), "queue"))
- >>> things [2][1][1][2]
- 'z'
- #元组可以存放任意数据类型的任意项,包括组合类型,比如元组与列表,实际上存放的是对象引用。
- #但是使用这样复杂的嵌套数据结构很容易造成混淆,一个解决的办法是为特定的索引位置指定名字:
- >>> MAINUFACTURER, MODEL, SEATING = (0, 1, 2)
- >>> MINIMUM, MAXIMUM = (0, 1)
- >>> aircraft = ("Airbus", "A320-200", (100, 220))
- >>> aircraft[SEATING][MAXIMUM]
- 220
- #在赋值操作的右边是序列,左边是元组的情况下,我们称右边被拆分。序列拆分可用于交换值:
- a, b = (b, a)
- >>> import math
- >>> for x, y in ((-3, 4), (5, 12), (28, -45)): #将其中的每个二元组拆分为x, y
- print(math.hypot(x, y))
- 5.0
- 13.0
- 53.0
- #命名的元组
- #命名的元组与普通元组一样,有相同的表现特征,
- #其添加的功能就是可以根据名称引用元组中的项,
- #就像根据索引位置一样,这一功能使我们可以创建数据项的聚集。
- #collections模块提供了namedtuple()函数,
- #该函数用于创建自定义的元组数据类型,例如:
- import collections
- Sale = collections.namedtuple("Sale",
- "productid customerid date quantity price")
- # collections.namedtuple()的第一个参数是想要自定义元组数据类型的名称,
- #第二个参数是一个字符串,其中包含使用空格分隔的名称,
- #每个名称代表该元组数据类型的第一项。
- #第一个参数以及第二个参数中空格分隔开的名称必须都是有效的Python字符串。
- #该函数返回一个自定义的类(数据类型),可用于创建命名的元组。
- #因此,这一情况下,我们将Sale与任何其他Python类(比如元组)一样看都看待,
- #并创建类型为Sale的对象,如:
- sales = []
- sales.append(Sale(432, 921, "2008-09-14", 3, 7.99))
- sales.append(Sale(419, 874, "2008-09=15", 1, 18.49))
- #这里创建了包含两个Sale项的列表,也就是包含两个自定义元组。
- #我们可以使用索引位置来引用元组中的项。
- #如,第一个销售项的价格为sales[0][-1](也就是7.99)
- #但我们也可以使用名称进行引用,并且这样会更加清晰:
- total = 0
- for sale in sales:
- total += sale.quantity * sale.price
- print("Total ${0:.2f}".format(total)) #Total $42.46