1.数据结构
  数据结构是以某种方式组织在一起的数据的集合。最基本的数据结构是序列。
2.序列
  序列常用的类型有以下六类:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。
3.列表 
  (1)什么是列表?
    列表是由数字、字符串等组成,可随意修改。
    a = ['samp', 'eggs', 520, 100, 34]
  (2)列表的操作
    a.索引
      列表的元素都有特定的位置,这个位置由索引来描述。
      通过索引可以找到某一元素。
      索引分为正索引和负索引。正索引是从左往右,第一个位置是0;负索引是从右往左开始,第一个位置是-1。
      a[3] = 100
      a[-3] = 520
    b.分片
Python-字符串。
      a[0:3] = ['samp', 'eggs', 520]
      a[-1:-3] = [520, 100]
      注意:切片左边的数要小于右面,若大于,则取空。
      分片的步长,默认步长为1,若设置步长为n(n>1),则取得元素之间会隔n-1个元素。步长也可以为负数,表示从左向右开始提取元素。
      例:numbers = [1,2,3,4,5,6,7,8,9,10]  
        numbers[0:10:2] = [1,3,5,7,9] --最后一个2表示步长为2
    c.加
      两种相同的序列之间可以进行相加。
    d.乘
      用数字n*列表会等到一个新的列表,新的列表是原列表循环n次。
      乘的操作可以用来初始化上。None是Python中的一个内键值,可以用None来表示列表中的元素是空的。
      a = [None]*10  --初始化一个长度为10的列表,每个元素的空。
    e.判断成员资格
      使用in运算符判断某一值是否在序列中。in是布尔运算符,若在序列中,则返回true;否则,返回false。
    f.迭代
      后续学习...
   (3)元素操作
    a.元素赋值
      用“=”给元素赋值,但是要利用索引说明给列表的哪个元素赋值。
    b.元素删除
      用del删除元素,但是要利用索引说明删除列表的哪个元素。
      name = ['Viga','Johny','zihan']
      del name[2]  -->name =  ['Viga','Johny']
    c.分片赋值
      通过分片赋值可以实现一次改变多个元素。
      name = ['Viga','Johny','zihan']
      name[2:] = ['chuhan','zifan']
      print(name)  -->['Viga','Johny','chuhan','zifan']
   (4)列表方法
      方法需要对象调用,例如:对象.方法(参数)
     a.append
      用于在列表末尾追加新的对象,注意:append函数是返回原列表而非返回新建列表。
      a = [1,2,3,4]
      a.append(5)
      print(a)  -->[1,2,3,4,5]
     b.count
      用于统计某个元素在列表中出现的次数。
      a = [1,2,3,4]
      b = a.count(2)
      print(b)
     c.extend
      用于在列表末尾一次性追加另一个列表的所有值。
      a =  [1,2,3,4]
      b = [5,6]
      a.extend(b)
      print(a)
      extend和连接“+”的区别:
        extend是改变原列表,“+”是生成新的列表。
     d.index
      用于从列表中找出某个值第一个匹配项的索引位置。
      a = ['a','b','c','d']
      a.index('c')  -->2
     e.insert
       insert(i,x)用于在列表的i位置插入x

     f.pop
      pop()函数默认会移除一个列表中最后一个元素,并返回该元素的值。
      a.pop()  -->'d'
      print(a)  -->['a','b','c']
      pop函数可以实现一个数据结构--栈,先进后出,最先放入列表的元素最后被移除。
     g.remove
      remove函数用来移除列表中第一个匹配元素。改变了列表但无返回值。
      a = ['a','b','c','b']
      a.remove('b') 
      print(a) -->['a','c','b']
     h.reverse
      reverse函数用于将列表中的元素反向存放。改变了列表但无返回值。
      a.reverse()
      print(a)  -->['b','c','d']
     i.sort
      sort()函数用于对列表本身进行排序,改变了列表但无返回值。
      b = [5,3,4,1,6]
      b.sort()
      print(b)  -->[1,3,4,5,6]
      sort()函数不仅可以对元素是数字的列表进行排序,还可以对其他列表排序。
      sort()函数有三个可选的参数,又称为关键字参数cmp、key和reverse。
      cmp提供了比较函数的默认方式,即从小到大排序。
      key必须用来指定一个在排序过程中使用的函数,该函数可以为每个元素创造一个键。
      reverse可以用来确定是否需要反向排序,是简单的布尔值,True或Flase,reverse=True表示反向,反之,不反向。
      b.sort(cmp) -->[1,3,4,5,6]
      s = ['wq','a','safas','sss']
      s.sort(key=len)
      print(s)  -->['a','wq','sss','safas']
      b.sort(reverse = True) -->反向排序
     j.sorted
      sorted()函数对列表不进行排序,会生成列表的副本,并对副本进行排序。
      b = [5,3,4,1,6]
      a = sorted(b)
      print(b)  -->[5,3,4,1,6]
      print(a)  -->[1,3,4,5,6]
    k.reverse
      reverse()函数对列表本身进行反向排序,但返回值为None。
    l.cmp
      cmp(x,y)函数即compare比较函数,cmp函数必须要有两个参数。
      若x>y,值为1;
      若x<y,值为-1;
      若x=y,值为0。
   (5)赋值和复制的区别
    x = [1,2,3,4]
    赋值(=): y = x,这是对y列表赋值为x列表,x、y同时指向同一个列表[1,2,3,4]。
    复制:可以用分片进行复制操作,y = x[:],此时y是x的一个副本,不指向同一个列表。