美文网首页
2018-10-09 010 有关序列

2018-10-09 010 有关序列

作者: 杜若飞er | 来源:发表于2018-10-09 17:19 被阅读10次
    何为“序列”

    序列是指一块用来存放多个值的连续内存空间——这是物理层的说法,从学习一些数据结构的知识来看,应当还有一种逻辑上的序列,也就是虽然不使用连续的内存空间,但使用其他方法,也连成一个序列。
    一般来说,序列的各个元素常常是相互有关的。
    在Python中,各种卧槽类型都属于序列,其中,字典和集合两个是无序的(字典偏重于检索而集合偏重于逻辑关系),列表、元组、字符串(没错它也当然是一串字符的序列)都是有顺序的,而在Python中,有顺序的字符串都支持双向索引,除了一般的正向索引(01234……)之外,还可以使用负索引,比如在前面介绍的字符串切片中可见的-1表示倒数第一个之类。
    可以使用负索引是Python的一大特色。
    所有的序列类型都可以进行一些常用的操作:索引(indexing)、切片(slicing)、加(adding)、乘(multiplying)以及检查(与搜索相仿),一般的,这些序列类型还具有计算长度、找出最大最小元素的基本操作。

    序列索引

    序列可以通过其数字索引访问其实际元素,这个操作根本上是基于序列对象的一个特殊方法_ _getitem_ _(),它确保了序列通过整数下标访问序列元素的可行。
    使用时仅需如此:
    s[i] #访问序列s的第i个元素(正向索引)
    而正如前面所介绍,序列也支持反向索引:
    s[-1] #访问序列s的倒数第一个元素
    为了和正向索引相区分,反向索引是从-1开始的。
    索引一般会产生两种错误:

    TypeError: string indices must be integers
    IndexError: string index out of range
    

    这里,TypeError是因为索引使用了非整数(python好像不支持字符和A表数字的自动转换,所以直接用一个字符也是不行的),而IndexError是因为索引越界,C++如果编号越界,并不会报错,但运行着早晚会出问题,这里Python的处理还是比较安全的。

    序列切片

    切片是指这样一种操作:它作用于一种序列类型,使之经过分隔后返回其结果。
    Python中的切片使用两个冒号分隔三个数字,具体情况如下:
    s[i:j:k]
    其中的 i 表示切片开始位置, j 表示切片结束的位置, k 则表示切片的步长(该数字默认为1,常与第二个冒号一起省略)。简而言之,切片操作的实现需要提供两个索引所谓边界,处在边界之中的子序列于是成为一个新序列,其中,第一个索引(左边界)代表的元素包含在子序列中,第二个索引(右边界)则不在子序列中。
    步长如果设置为比1大的数字,就会跳过某些元素,比如设置为2时,就会在边界之中隔一个选一个。
    另外,在使用负索引时,也要保证左边界在右边界之左(这好像是一句废话,但事实上还是很值得注意的)。

    NewStr1 = Str [ -3 ; -1 ]       #这样是倒数第三到倒数第一个一个切片;
    NewStr2 = Str [ -1 : -3 ]       #这样切出来是一个空序列;
    

    有时,需要包含序列的最后一个元素,但负向索引无法使用-0,直接使用-1时又会把倒数第一个元素排除在外,此时可以空置第二个数字,但不需要省略冒号(否则又成了简单的数字索引)
    在Python中,切片的功能是相当强大的,除了常用的截取列表外,还可以修改、删除元素,甚至可以增添元素。

    序列重复

    序列重复使用Str * n 的基本操作,这一操作不仅对于字符串有用,对于其他序列类型也起作用。
    有时我们只知道我们想要一个多长的序列,却暂时不知道其中的元素,此时又要引入另一个非常重要的概念:None,意义就是“这里什么都没有”。
    比如说我们需要一个长度为10的空的列表,就可以这样写:
    EmptyStr = [None] * 10

    序列检查

    序列检查是指查看一个单独的元素是否属于该序列,可以通过以下四种方式:

    x in str
    x not in str
    str.count(x)
    s.index(x[ ,i [ , j]])
    

    其中,最后一种(也是最难写的一种),可以指定检查的范围(使用ij两个数组的索引),但是如果找不到(检查失败),这样的操作就会导致ValueError;

    序列比较

    序列比较使用和数字比较同样的运算符(也就是<>=!=那一套);

    序列排序

    序列排序可以使用内置的函数(sorted() )快速实现,该函数返回序列的排序列表,本菜鸡推断这样内置的、极其常用的排序函数,其内部肯定是通过快速排序法实现的,其效率应该值得信赖;
    这个函数的全写是这样的:
    sort ( iterable , key = None , reverse = False )
    其中key是计算表示键值的函数,reverse则是表示排序规则,默认是false(也就是升序,由小到大)


    多说两句

    看来人家编书把String编到后面还是有理由的……

    相关文章

      网友评论

          本文标题:2018-10-09 010 有关序列

          本文链接:https://www.haomeiwen.com/subject/jhdyaftx.html