python类型-序列

Posted MrLayflolk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python类型-序列相关的知识,希望对你有一定的参考价值。

注:本文档主要是学习《Python核心编程(第二版)》时做的资料整理。

1.序列

序列的成员是有序排列的,并且可以通过下标偏移量访问到它的一个或者几个成员,包括字符串(普通字符串和Unicode字符串)、列表和元组类型。下标偏移量从0开始到总元素-1结束。

1.1操作符

1.1.1成员关系操作符

成员关系操作符:用来判断一个元素是否属于一个序列。in/not in操作符返回值一般就是True/False,语法为: 对象 [not] in 序列

1 >>> list = [1, 2, 3]
2 >>> 1 in list 
3 True
4 >>> 4 in list 
5 False

1.1.2连接操作符

允许把一个序列和另一个相同类型的序列做连接sequence1 + sequence2,这种方法不是最高效的;

1 >>> str1 = \'hello\'
2 >>> str2 = \'world\'
3 >>> str1 + str2
4 \'helloworld\'

对于字符串,可将所有的子字符串放在一个列表或可迭代对象中,然后调用join方法来把所有的内容连接在一起以节约内存;对列表来说,可用列表的extend()方法来把两个或者多个列表对象合并。

1 >>> str3 = \'\'
2 >>> str3.join([str1, str2])
3 \'helloworld\'

1.1.3重读操作符(*)

sequence * copies_int,copies_int必须是一个整型,不能是长整型。该操作符返回一个新的包含多份原对象拷贝的对象。

1 >>> s1 = \'ha\'
2 >>> s1*3
3 \'hahaha\'

1.14切片操作符([], [:], [::])

访问某一个数据元素的语法:sequence[index]。范围从0到偏移值最大值(比序列长度少一),用len()函数可以得到序列长度,实际的范围是0<= index <= len(sequence)-1。使用负数索引,范围是-1到序列的负长度-len(sequence),-len(sequence) <= index <= -1

1 >>> print (\'Faye\', \'Leanna\', \'Daylen\')[1]
2 Leanna

访问多个元素:sequence[starting_index: ending_index],可得到从起始索引到结束索引之间的一个"片"元素。

1.15用步长索引来进行扩展的切片操作

 1 sequence[starting_index: ending_index, step]
 2 >>> s = \'abcdefghijk\'
 3 >>> s[::-1]
 4 \'kjihgfedcba\'
 5 >>> s[::2]
 6 \'acegik\'
 7 >>>
 8 >>> a = \'abcde\'
 9 >>> for i in [None] + range(-1, -len(a), -1):
10 ... print a[:i]
11 ...
12 abcde
13 abcd
14 abc
15 ab
16 a

序列操作符

作用

seq[ind]

获取下标为ind的元素

seq[ind1:ind2]

获取下标从ind1到ind2间的元素集合

seq*expr

序列重复expr次

seq1 + seq2

连接序列seq1和seq2

obj in seq

判断obj元素是否包含在seq中

obj not in seq

判断obj元素是否不包含在seq中

1.2序列内建函数

1.2.1类型转换函数

内建函数list()、str()和tuple()被用作在各种类型之间转换,这些函数都是工厂函数,将对象作为参数,并将其内容(浅拷贝)到生成的对象中。

一旦一个对象被建立,就不能改变其身份或类型,把一个列表对象传给list()函数,会创建一个这个对象的浅拷贝,然后将其插入新的列表中。所谓浅拷贝就是只拷贝这个对象的索引,而不是创建了一个对象。

函数

含义

list(iter)

把可迭代对象转换为列表

str(obj)

把obj对象转换为字符串(对象的字符串表示法)

unicode(obj)

把对象转换为Unicode字符串(使用默认编码)

basestring()

抽象工厂函数,其作用仅仅是为str和Unicode函数提供父类,所以不能被实例化,也不能被调用

tuple(item)

把一个可迭代对象转换为一个元组对象

1 >>> obj = list(x for x in range(10))
2 >>> obj
3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4 >>> str(obj)
5 \'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\'
6 >>> tuple(obj)
7 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
8 >>> unicode(obj)
9 u\'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\'

1.2.2可操作函数

序列类型可用的内建函数如下:

函数名

功能

enumerate(iter)

接受一个可迭代对象作为参数,返回一个enumerate对象(同时也是一个迭代器),该对象生成由iter每个元素的index值和item值组成的数组

len(seq)

返回seq的长度

max(iter, key=None) or max(arg0, arg1,…, key=None)

返回iter或(arg0, arg1,…)中的最大值,如果指定了key,这个key必须是一个可以传给sort()方法的,用于比较的回调函数

min(iter, key=None) or min(arg0, arg1,…, key=None)

返回iter或(arg0, arg1,…)中的最小值,如果指定了key,这个key必须是一个可以传给sort()方法的,用于比较的回调函数

sorted(iter, func=None, key=None, reverse=False)

接受一个可迭代对象,返回一个有序的列表,可选参数func、key和reverse的含义跟list.sort()内建函数的参数含义一样

sum(seq, init=0)

返回seq和可选参数init的总和,其效果等同于reduce(operator,add,seq,init)

zip(it0, it1, … , itN)

返回一个列表,其第一个元素是it0、it1…这些元素的第一个元素组成的一个元组,第二个。。。依此类推

后面详细介绍字符串、列表和元组时再详细介绍这些函数。

以上是关于python类型-序列的主要内容,如果未能解决你的问题,请参考以下文章

Python切片中的误区与高级用法

Python list & dict & str

python中的while循环与for循环怎么样那个比较好用?

python基础之序列类型的方法——列表&amp;amp;元组

在python 3.6中处理自定义编码时遇到类型错误

Python学习总结