序列

Python中的数据类型很多,主要有简单数据类型(基本数据类型)和结构数据类型(复合数据类型)。

结构数据是一组数据元素(结点)按照一定方式构成的复合数据形式。

Python中常见的复合数据类型有序列类型,集合类型,映射类型。序列类型包含str(字符串,字符序列)、list(列表)、tuple(元组)。集合类型包括set(集合)、 frozenset。映射类型主要为dict(字典)。

1、序列类型

        序列表示索引为非负整数的有序对象集合,包括字符串、列表和元组。字符串为字符的序列,列表与元组则是任意数据类型或对象的的序列。元组是不可变的,字符串也是不可变的(修改字符串就是重新创建一个字符串)

(1)序列切片

        对于任何一个序列,它们的元素都是有序的,都可以使用序号来获取每一项成员的值,另一方面python中序列的序号既可以从左向右从0开始计数,又可以从右向左从-1开始计数。因此以序号来取序列成员的话,同一成员可以有两个序号取法。

  >>> s = 'python'

  >>> s[1]

  'y'

  >>> s[-5]

  'y'

  >>> l = [2,5,3,7,9,6]

  >>> l[3]

  7

  >>> l[-3]

  7

序列的切片是指用形如[start:end:step]来取序列中的部分成员数据项。常用的方法如下(设alst = [2,5,3,7,9,6]):

  alst[:]        取全部的成员数据项

  alst[0:]        取全部的成员数据项

  alst[:-1]        取除最后一个之外的成员数据项

  alst[2:4]        取序号为[2,4)的成员数据项

  alst[::2]        从第一个开始,每隔一个取一个成员,得到[2,3,9]

  alst[1:6:2]       从第2个到第5个([1,6)),每隔一个取

  alst[::-1]       从右向左取全部成员,得到[6,9,7,3,5,2]

  alst[::-2]          从右向左取成员,每隔一个取一个,得到[6,7,5]

  alst[5:0:-2]      (0,5]从右向左取,每隔一个取一个,得到[6,7,5]

实例代码如下:

  

    >>> alst = [2,5,3,7,9,6]

  >>> alst[:]

  [2, 5, 3, 7, 9, 6]

  >>> alst[0:]

  [2, 5, 3, 7, 9, 6]

  >>> alst[:-1]

  [2, 5, 3, 7, 9]

  >>> alst[2:4]

  [3, 7]

  >>> alst[::2]

  [2, 3, 9]

  >>> alst[1:6:2]

  [5, 7, 6]

  >>> alst[::-1]

  [6, 9, 7, 3, 5, 2]

  >>> alst[::-2]

  [6, 7, 5]

  >>> alst[5:0:-2]

  [6, 7, 5]    

(2)序列类型操作符

连接操作符:连接操作符’ + ‘,可以将若干个同类型的序列对象连接到一起。

  >>> s = 'python'

  >>> s1 = 'ajdfls'

  >>> s + s1

  'pythonajdfls'

重复运算符:重复运算符’ * ‘,能够让被操作数重复的n次,并生成一个新的同类型序列。

  >>> s * 2

  'pythonpython'

  >>> l = [2,3,6,4]

  >>> l*2

  [2, 3, 6, 4, 2, 3, 6, 4]

成员运算符:成员运算符(in/not in)能够判断一个指定对象是否是作为一个容器中的元素,由此来判断两个对象间的关系。 

  >>> 'th' in s

  True

  >>> 'thn' in s

  False

  >>> 2 in l

  True

  >>> 4 not in l

  False

(3)序列内置操作

在Python中内置了一些对序列进行操作的方法,如下所示:

  len(s)          返回s的元素数(长度)

  min(s)          返回s中的最小值

  max(s)          返回s中的最大值

  sum(s[,start])          返回s中各项的和

  all(s)          s中所有元素为真,则返回为真,否则返回为假

  any(s)          s中有一项元素为真,则返回为真,否则返回为假

  enumerate(s)     枚举,用于遍历序列中的元素以及它们的下标

  reversed(s)   接受一个序列作为参数,返回一个以逆序访问的迭代器

  sorted(s)    接受一个可迭代对象作为参数,返回一个有序的列表

  zip(iter0,iter1)   返回为元组组成的列表, 它接受一系列可迭代的对象作为参数,将对象中对应的元素按顺序组合成一个tuple,每个tuple中包含的是原有序列中对应序号位置的元素,然后返回由这些tuples组成的list。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。

实例如下:

  

>>> s = 'python'

  >>> len(s)

  6

  >>> min(s)

  'h'

  >>> max(s)

  'y'

  >>> sum(s)

  Traceback (most recent call last):

    File "<pyshell#36>", line 1, in <module>

      sum(s)

  TypeError: unsupported operand type(s) for +: 'int' and 'str'

  >>> all(s)

  True

  >>> any(s)

  True

  >>> l = [2,5,3,7]

  >>> sum(l)

  17

  >>> sum(l[2:])

  10

  >>> s = 'python'

  >>> enumerate(s)

  <enumerate object at 0x0000000003414E58>

  >>> for i in enumerate(s):

    print(i)

  (0, 'p')

  (1, 'y')

  (2, 't')

  (3, 'h')

  (4, 'o')

  (5, 'n')

  >>> l = [2,5,3,7]

  >>> for i,j in enumerate(l):

    print(i,j)

  0 2

  1 5

  2 3

  3 7

  >>> reversed(s)

  <reversed object at 0x00000000034125C0>

  >>> for i in reversed(s):

    print(i)

  n

  o

  h

  t

  y

  p

  >>> sorted(s)

  ['h', 'n', 'o', 'p', 't', 'y']

  >>> l = [2,5,3,7]

  >>> sorted(l)

  [2, 3, 5, 7]

  >>> t = (2,5,3,7)

  >>> sorted(t)

  [2, 3, 5, 7]

  >>> zip(s,l)

  <zip object at 0x0000000003691488>

  >>> for i in zip(s,l):

    print(i)

  ('p', 2)

  ('y', 5)

  ('t', 3)

  ('h', 7)
View Code
原文地址:https://www.cnblogs.com/kuenen/p/5962992.html