列表list

Python内置的一种数据类型是列表:listlist是一种有序的集合,可以随时添加和删除其中的元素。

一、定义列表

>>> list1=['a','b','c',1,2,3]>>> list2=['a','b','c',[1,2,3]]

从上面两个列表,可以总结出列表的特点如下:

1.用中括号括起来,元素之间用逗号分隔。

2.字符串需要使用单引号,整数不用。

3.list里面的元素的数据类型也可以不同。

4.list元素也可以是另一个list

 

二、列表的基本操作

#查看列表元素个数

>>> len(list1)6

#用索引来访问列表中每一个位置的元素,索引是从0开始的

>>> list1[0]'a'>>> list1[1]'b'>>> list1[-1]3>>> list2[-1][0]1

注意:最后一个元素的索引为-1,以此类推,倒数第二个的为-2……;索引是不能超出范围的否则会报一个IndexError错误。

 

#追加一个元素

>>> list1.append(4)>>> list1['a', 'b', 'c', 1, 2, 3, 4]

#删除指定内容的元素

>>> list1.remove('a')>>> list1['b', 'c', 1, 2, 3, 4]

#根据索引删除元素,如果不指定索引,默认从最后一个开始删除。

>>> list1.pop(0)'b'>>> list1['c', 1, 2, 3, 4]

#统计列表中相同元素的个数

>>> list1.count(1)1

#统计指定元素的索引号

>>> list1.index('c')0

#在指定索引的元素之后添加一个元素

>>> list1.insert(1,'d')>>> list1['c', 'd', 1, 2, 3, 4]

#列表倒序排序

>>> list1.reverse()>>> list1[4, 3, 2, 1, 'd', 'c']

#按照元素大小升序排序

>>> list1.sort()>>> list1[1, 2, 3, 4, 'c', 'd']

#把一个列表扩展到另一个列表中

>>> list1.extend(list2)>>> list1[1, 2, 3, 4, 'c', 'd', 'a', 'b', 'c', [1, 2, 3]]

#列表连接

>>> list1+list2[1, 2, 3, 4, 'c', 'd', 'a', 'b', 'c', [1, 2, 3], 'a', 'b', 'c', [1, 2, 3]]

注意:列表中的元素没有发生变化

 

#清空列表

>>> list1=[]>>> len(list1)0

总结:

列表的索引号是从0开始的;

可以使用dir()查看列表的使用方法,括号中输入列表的名称;

使用help()查看操作的帮助,括号中输入列表名.操作,例如:

>>> help(list1.insert)Help on built-in function insert: insert(...)L.insert(index, object) -- insert object before index

补充:

有时候我们需要将一个列表重新排序的结果定义给一个新的列表,而且不改变原列表,就用到了sorted()reversed()

sorted()python的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表,例如:

>>> a=[4,3,2,1]>>> b=sorted(a)   #实现升序排序后定义给另一个列表>>> b[1, 2, 3, 4]>>> a#列表a并没有发生变化[4, 3, 2, 1] >>> c=sorted(b,reverse=True)   #实现降序排列后定义给另一个列表>>> c[4, 3, 2, 1]>>> a[4, 3, 2, 1]

reversed()也是python的一个内置函数,作用是返回序列的反向访问的迭代器,参数可以是列表,元组,字符串,不改变原对象,例如:

>>> a=[1,2,3,4]>>> b=reversed(a)>>> b
  #b是一个迭代器>>> c=list(reversed(a))  #实现“反转”一个列表的结果定义给另一个列表,实现列表reverse方法同样的功能>>> c[4, 3, 2, 1]>>> a[1, 2, 3, 4]

 

三、切片

可以使用分片操作来访问一定范围内的元素。分片通过冒号隔开的两个索引来实现:

分片对于提取序列的一部分很有用。切片的原则是取头不取尾,即第一个索引是要提取的第一个元素的编号,而最后的索引则是分片之后剩余部分的第一个元素的编号。

例如:

>>> list2['a', 'b', 'c', [1, 2, 3]]>>> list2[1:3]['b', 'c']

如果不指定第一个索引,默认从头开始切取;如果不指定第二个索引,默认切到最后,例如:

>>> list2[:3]['a', 'b', 'c']>>> list2[2:]['c', [1, 2, 3]]

#步长切片

进行分片的时候,分片的开始和结束需要进行指定,按照步长逐个遍历序列的元素,然后返回开始和结束点之间的所有元素。例如:

>>> list3=[0,1,2,3,4,5,6,7,8,9]>>> list3[::2][0, 2, 4, 6, 8]>>> list3[1::2][1, 3, 5, 7, 9]

 

四、列表生成式

需要生成一个1~10的列表,可以利用内置函数range(),例如:

>>> a=range(1,10)>>> type(a)
>>> a[1, 2, 3, 4, 5, 6, 7, 8, 9]

那如果需要生成1~10每个数平方的列表,那我们可以直接利用如下一行代码来实现:

>>> [x*x for x in range(1,10)][1, 4, 9, 16, 25, 36, 49, 64, 81]

for循环后面可以加上条件,例如:

[x*x for x in range(1,10) if x%2==1]    #得到1~10所有基数平方组成的列表

由此可以想到,如果利用for循环对列表进行处理得到另一个列表完全可以有一行代码来简单实现,例如:

>>> a=[4,3,5,7,2,8]>>> [x for x in a if x > 3][4, 5, 7, 8]

练习

1.创建一个空列表

>>> lst1=[]

2.添加10个列表元素,包含字符串,数字

>>> lst1=[0,1,2,3,4,'a','b','c','d','e']

3.从第5个索引号起插入5个元素

>>> lst1.insert(5,5)

>>> lst1.insert(5,6)

>>> lst1.insert(5,7)

>>> lst1.insert(5,8)

>>> lst1.insert(5,9)

4.分别用切片方法取出前5个,和后5

>>> lst1[:5]

[0, 1, 2, 3, 4]

>>> lst1[-5:]

['a', 'b', 'c', 'd', 'e']

5.分别取出奇数项,和偶数项

>>> lst1.sort()

>>> lst1[::2]

[0, 2, 4, 6, 8, 'a', 'c', 'e']

>>> lst1[1::2]

[1, 3, 5, 7, 9, 'b', 'd']

6.print出列表元素个数

>>> len(lst1)

15

7.删除某个元素

>>> lst1.remove('a')

8.删除列表最后一个元素

>>> lst1.pop(-1)

'e'

9.删除列表第5个元素

>>> lst1.pop(4)

4