Python--list学习

1.介绍

  在python中,list称为列表,和java中的集合很相似,是一个可变的数组容器,但是python中的list不需要提前进行申明,也可以存储不是同一种数据类型的值,也可以进行列表嵌套列表。

  创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示

list1=list()             #利用list()的工厂函数创建一个空的列表
list2=['a','b','c','d','e']    #创建一个字符列表
list3=[0,1,2,3,4]          #创建一个整数列表
list4=['a',1,2,'b']         #创建一个有字符有整数的列表
list5=[1,2,[3,4],[5,6],[7,[8,9]]] #创建一个列表中包含列表,值的类型也可以不一致

  列表中的每个元素都分配一个索引(位置),第一个索引是0,第二个索引是1,依此类推。

  当索引为负数时,最后一个元素的索引为-1.倒数第二个元素的索引为-2,依此类推。

  我们可以用list_name[index]来取出列表中的元素,例如list2[0],list3[1],对应的就是字符'a',1。当时当我们索引不存在的元素是,就会出现异常(exception)。例如输出list3[5],此时会出现IndexError的异常,因为从上面我们可以看出,这个list3列表只有5个元素,他的最大索引为4,索引为5的元素是不存在的。

2.方法

  增:

    list_name.insert(index,obj)   此方法为在指定的index位置上插入一个obj,无返回值,当插入的位置不存在,负数为在负数索引左边插入,正数为在尾部插入

    list_name.append(obj)     此方法为在尾部的位置插入一个obj,无返回值

    list_name.extend(seq)     此方法为用另外一个序列(列表或者元组)去扩充原列表,无返回值   

>>>list1=['a','b','c','d']      #先创建一个list1列表
>>>list1.insert(0,'h')        #在索引为0的位置插入'h',无返回值。 当插入的位置为-1时,应该是在-1索引的值'd'的左边插入进去,当插入位置为5,即插入尾部 >>>list1                #打印出新的列表list1   ['h','a','b','c','d']       #结果显示
>>>list1.append('g')         #在列表的尾部插入'g',无返回值
>>>list1                #打印出新的列表list1
  ['h','a','b','c','d','g']    #结果显示
>>>list1.extend([1,2])        #在新列表扩充原有列表,无返回值
>>>list1                #打印出新的列表list1
  ['h','a','b','c','d','g',1,2] #结果显示

  删:

    del list_name[index]            此方法为移除指定索引的对象,无返回值,对象不存在则报IndexError

    list_name.remove(obj)    此方法为移除一个指定的对象,无返回值,对象不存在则报ValueError

    list_name.pop(index=-1)    此方法为移除指定索引的对象,索引默认为-1即尾部的那个对象,返回被移除的对象,索引不存在则报IndexError。

>>>list1=['a','b','c','d','e']        #创建一个list列表
>>>list1.remove('c')                #移除对象'c'
>>>list1                           
    ['a','b','d','e']
>>>list1.pop()                        #弹出list1列表中的最后一个元素,即'e'
    'e'
>>>list1
    ['a','b','d']
>>>list1.pop(2)                      #弹出list1列表中索引为2的元素
    'd'
>>>list1
    ['a','b']

  改:

    对于修改列表中的元素,利用列表的索引找到元素,直接赋值即可

>>>list1=['a','b','c','d']     #创建一个列表
>>>list1[1]='q'               #修改索引为1的元素,改为'q'
>>>list1
    ['a','q','c','d']

  查:

    对于查找列表中的元素,利用列表的索引找到元素,即可,或者使用list_name.index(obj)查找obj出现的第一次索引位置,并返回

>>>list1=['a','b','c','d','b']            #创建一个新列表
>>>list1[0]                             #查找索引为0的元素
    'a'                   #输出结果
>>>list1.index('b')             #输出'b'出现的第一次位置
   1                    

  其他:

    排序:list_name.sort(key=None,reverse=False)         

  对列表里面的元素进行排序,无返回值,但是改变其内部结构。有2个可选参数,key指定一个函数,按照函数进行排序;另外一个是指定是否需要降序。当列表里面的数据类型不一致,在  Python3.x中排序会抛出TypeError,Python2.x不会。如果不想改变原有列表的内部结构,需要用列表切片或者用sorted()函数。(这里不介绍对象的排序,后面会介绍)

>>>list1=['av','ac','ada','qwe','rges','sfgh','awewra','bnhjn']      #创建一个字符串列表
>>>list1.sort()        #对list1进行了排序,没有返回值,但是此时list1列表的内部结构已经发生改变,因为被排序了,按照字母在ascii码表的值大小排序
>>>list1
  ['ac','ada','av','awewra','bnhjn','qwe','rges','sfgh'] >>>list1.sort(reverse=True)    #此时用降序的结构对list1进行排序,不是调用一次反转一次,而是只要变成了按照ascii码表的降序即完成排序
  ['sfgh','rges','qwe','bnhjn','awewra','av','ada','ac'] #已经完成降序的排序,即使再多次调用前面那个语句,结果也是一样的,不发生任何变化 >>>list1.sort(key=len)      #通过函数进行排序,函数为长度,即按照每个元素的长度进行排序
  ['ac','av','ada','qwe','rges','sfgh','bnhjn','awewra']

# sort() 这个函数会改变列表的内部结构,如果我们不想改变列表的内部结构,就需要用切片或者sorted()函数了
>>>list2=['a','ab','ed','cfs','apk']
>>>list2[1:]           #列表切片,拷贝一个副本,副本是原列表索引1开始到结束(包含索引1)
  ['ab','ed','cfs','apk']   #这个为列表的切片副本,但是没有赋值名字
>>>list3=list2[1:]         #列表切片,拷贝一个副本,副本是原列表索引1开始到结束(包含索引1),并把这个副本赋值给list3列表
>>>list3                
  ['ab','ed','cfs','apk']    #生成了一个新的列表
>>>list4=list2[:3]         #列表切片,拷贝一个副本,副本是原列表开始到索引为3结束(不包含索引3),并把这个副本赋值给list4列表
>>>list4
  ['a','ab','ed']        #生成了一个新的列表
>>>list5=list2[:]         #列表切片,拷贝一个副本,副本和原列表一模一样,并把这个副本赋值给list5列表
### 切片和直接赋值的区别###
>>>list1=['a','ab','ed'] #创建了一个列表对象,并生成一个list1的标签指向这个列表对象
>>>list2=list1[:]       #拷贝了列表list1去生成一个新的列表对象,然后生成另外一个标签list2去指向新拷贝得到的列表,此时有2个标签,他们指向各自的对象,虽然对象里面的元素一样
>>>list3=list1         #生成一个list3标签,并且此标签页指向list1这个列表对象,所以此时有2个标签,但是只是指向同一个对象,修改了list1,list3会跟着变化的,而切片的则不会
###

>>>list1=['e','a','f','c'] #创建一个新列表
>>>sorted(list1)         #sorted()函数返回了原列表排序后生成的新列表
  ['a','c','e','f']
>>>list2=sorted(list1)     #通过sorted()函数对list1排序,返回的新列表赋值给list2,list1列表的内部结构没发生变化,而新的list2则为list1排序后的列表
>>>list3=list1.sort()      #这样赋值是错误的,因为sort()这个函数不返回任何值,所以list3为None,因为在Python中,函数没有返回值的时候,都会返回一个None类型

    反转列表:lise_name.reverse()           无返回值,但是列表内部结构已经改变

    统计元素出现的次数:list_name.count(obj)            返回统计的次数

    最大值、最小值:max(list_name) 、min(list_name)    非同一类型的列表,取最大或者最小,抛出TypeError

    将序列转化为列表:list(seq)                

    统计列表长度:len(list_name)     返回列表长度

    注:对比函数cmp(list1,list2)在Python3中已经删除,在Python2可以使用

3.迭代

     列表中常见的迭代就是for循环,while循环也可以,但是很少使用。   

>>>list1=['a','b','c','d','e']

>>>for each in list1:
   print(each)

>>>count=0
>>>while count<len(list1):
   print(list1[count])  
   count+=1
posted @ 2016-08-10 22:54  二强  阅读(416)  评论(0编辑  收藏  举报