序列类型
python提供了五种内置序列类型:
bytearray
bytes
list
str
tuple
元组
元组是个有序的序列,其中包含0个或多个对象引用。
与字符串类似,元组也是固定的,因此不能替换或删除其中的任意数据项。如果需要修改,我们应该使用列表而不是元组,如果我们有一个元组,但又要对其进行修改,那么可以使用list转换函数将其转换为列表,之后再产生的列表上进行适当的修改。
tuple()-不指定参数时将返回一个空元组。该函数至多只能接受一个参数。
元组只提供了两种方法:
t.count(x),返回对象x在元组中出现的次数;
t.index(x),返回对象在元组t出现的最左边位置-在元组中不包含x时,则产生ValueError异常(这些方法对列表也是可用的)。
命名的元组
命名的元组与普通的元组一样,有相同的表现特征,其添加的功能就是可以根据名称引用元组中的项,就像根据索引位置一样,这以功能使我们可以创建数据项的聚集。
collections模块提供了namedtuple()函数,该函数用于创建自定义的元组数据类型,例如:
Person = collections.namedtuple('Person','name sex age')
collections.namedtuple()的第一个参数是想要创建的自定义元组数据类型的名称,第二个参数是一个字符串,其中包含使用空格分隔的名称,每个名称代表该元组数据类型的一项。
列表
列表是包含0个或多个对象引用的有序序列。
与字符串及元组不同的是,列表是可变的,因此,我们可以对列表中的项进行删除和替换,插入,替换或删除列表中的分片也是可能的。
list数据类型可以作为函数进行调用,list()-不带参数时进行电泳时将返回一个空列表
列表方法
语法 | 描述 |
---|---|
L.append(x) | 将数据项x追加到列表L的末尾 |
L.count(x) | 返回数据项x在L中出现的次数 |
L.extend(m) or L += m | 将iterable m 的项追加到L的结尾处,操作符+=完成同样的功能 |
L.index(x,start,end) | 返回数据项x在列表L中(或L的[start:end]分片中)最左边出现的索引位置,否则会产生一个ValueError异常 |
L.insert(i,x) | 在索引位置int i 处将数据项x插入列表L |
L.pop() | 返回并移除列表L最右边的数据项 |
L.pop(i) | 返回并移除L中索引位置int i 处的数据项 |
L.remove(i) | 从列表L中移除最左边出现的数据项x,如果找不到x就产生ValueError异常 |
L.reverse() | 对列表L进行反转 |
L.sort(...) | 对列表L进行排序,与内置的sorted()函数一样,这一方法可以接受可选的key和reverse参数 |
尽管可以使用分片操作符存取列表中的数据项,但在有些情况下,我们需要提取两个或更多的数据项,可以使用序列拆分实现。任意可迭代的(列表,元组等)数据类型都可以使用序列拆分操作符进行拆分,即*。用于赋值操作符左边的两个或者多个变量时,其中的一个使用*引导,数据项将赋值给该变量,而所有剩下的数据项将赋值给带星号的变量,下面是一些实例:
first , *rest = [1,2,3,4,5] \#fisrt = 1 ,rest = [2,3,4,5] first, *mid , last = [1,2,3,4,5] \#first = 1, mid = [2,3,4], last = 5
列表内涵
[expression for item in interable]
[expression for item in interable if condition]
对于第二种语法,实际上等价于:
temp = [] for item in iterable: if condition: temp.append(expression)
如果生成的列表非常大,那么根据需要生成每个数据项会比一次生成整个列表更高效,这可以通过生成器实现,而不使用列表内涵。
网友评论