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

print(list1[count])

count+=1