Python day05——序列类型

1、序列类型的分类

在python之中提供了主要一下几种序列类型:

  • 基本序列类型(Sequence Type):list(列表),tuple(元组),range(范围)
  • 专门处理文本的序列类型(Text Sequence Types):str(字符串)
  • 专门处理二进制数据的序列类型(Binary Sequence Types):bytes, bytearray, memoryview(内存查看对象)

按照序列是否可以被改变的分类

  • 可变序列(mutable):list
  • 不可变序列(immutable):str、tuple

1、其中Python2.x特有的序列类型

unicode, buffer, xrange

2、其中Python3.x特有的序列类型

bytes, range

2、序列类型的通用操作(Common Seqybce Operations)

下表就是大部分序列类型所支持的操作,包括可变类型和不可变类型。

其中s和t是同一种序列类型,n,i,j,k是整数类型,x是一个任意对象。

No 操作(Operation) 描述(Description)
1 x in s 如果s中的某项等于x,返回True,否则返回False
2 x not in s 如果s中的某项等于x,返回False,否则返回True
3 s + t s和t序列的拼接
4 s * n or n * s 等价于s拼接n次
5 s[i] s中的第i个元素,起始位置是0
6 s[i:j] 取得第i项到第j项(不包括j)的切片
7 s[i:j:k] 取得以步长为k的第i项到第j项的切片
8 len(s) 取得s的长度
9 min(s) 获得s中最小值
10 max(s) 获得s中最大值
11 s.index(x[,i[,j]]) 取得第一次出现x(在[i,j)之间)的索引
12 s.count(x) 取得x在s中出现的总数

Python官网原文

1、 in 与 not in

可以用in或not in 来进行子序列测试,in 操作的对象必须是可迭代类型(Iterable,我们将讲到迭代器的时候讲),否则会报一个TypeError的错误。例如

TypeError: argument of type 'int' is not iterable

2、 索引(index)

s[i],这样的操作就是索引,在其他语言之中,索引都是从0~len-1的,但在Python之中索引可以是负数。

如果索引是负数,则-1表示最后一个元素,-len则表示第一个元素,其中-0就是0。

同样如果索引不在以上范围,则抛出一个IndexError错误。

3、 n times

n<=0都会被当作是0,0*ss*0的结果都会是s同种类型的空序列。

注:这里的s*n(当n不等于0的时候),它们只是被多次引用而不是多次拷贝。

>>> s = [[]]
>>> s1 = s*3
>>> s1[0].append(1)
>>> s1
[[1], [1], [1]]
>>> s
[[1]]

4、 切片(Slice)

i, j, k都可以是负数,索引如果是负数,相当于len(s)+i。其中-0仍然是0。

  • 如果i,j大于len(s),则使用len(s);
  • 如果i省略,使用0,如果j省略使用len(s);
  • 如果i大于或等于j,切片的结果是空序列

步长为k的从i到j的切片被定义为x=i+n*k的项序列,其中0<=n<=(j-1)/k。换句话说,索引为i,i+k,i+2*k,i+3*k等,当达到j(不包括j)时停止;

  • 当k为正数的时候,i和j;
  • 当k为负数的时候,i和j;
  • 当k为None的时候,k被看做是1;

注: k不能为零,如果为零,会抛出一个ValueError错误

ValueError: slice step cannot be zero

5、 拼接(Concatenation)

拼接一个不可变序列总是会产生一个新的对象,这意味着通过重复的序列拼接将会在总序列长度中有一个二次运行时代价。如果要获得线性的运行时成本,你必须使用以下选项中的一种

  • 如果拼接字符串对象,你可以构建一个列表并使用str.join()或者使用io.StringIO实例结束的时候获取它的值(一些python实现会进行优化,这种优化在应用时更不可能实现二次运行,这种优化是与版本和实现相关的);
  • 如果拼接bytes对像,你同样可以使用bytes.join()或着使用.BytesIO,或者使用bytearray来拼接,bytearray对象是可变的,并且它有一个有效的资源过度分配机制;
  • 如果要拼接元组对象,请使用list替代;
  • 至于其他类型,请研究相关的类文档;

6、index(value[,start[,end]]) -> int

如果value没有找到,则抛出一个ValueError(如下所示),并不是所有的实现都支持传递额外的i和j参数。这些参数可以有效的搜索序列的子部分,传递额外的参数大致等价于s[i:j].index(x),只是在不复制任何数据的情况下使用返回的索引,而返回的索引是序列的开始,而不是切片中的开始。也就是说返回x在序列[i,j)中首次出现的位置

ValueError: substring not found
ValueError: 1 is not in list

7、 一些特定的序列类型(例如range)只支持遵循特定的模式的项序列,因此不支持连接或重复操作。

range(1,10)*10
TypeError: unsupported operand type(s) for *: 'range' and 'int'

range(1,10)+range(1,19)
TypeError: unsupported operand type(s) for +: 'range' and 'range'

3、文本序列类型(Text Sequence Type)——字符串(str)

在python之中,字符串是由引号(可以是单引号,双引号,三重引号)引起来的字符序列。

4、普通序列类型(Sequence Type):list(列表),(tuple)元组

5、二进制序列类型(Binary Sequence Types)

6、迭代

7、列表生成式

8、生成器

你可能感兴趣的:(python程序设计笔记)