Python列表是Python序列的一种,和字符串、元组一样,都属于序列类型。是元素按顺序排序,并可通过下标索引进入访问的数据类型。
关于字符串与元组的知识,以后再记录,这篇文章主要讲一下列表。
Python列表在创建后,可以通过下标索引在访问对应索引的元素值,感觉有点像数组,Python的数组是通过array扩展包来实现的,但是数组只允许存储相同类型的数据,而一个列表里面,可存储不同的数据类型,因此,列表是一种更加灵活的数据结构。
如果你有学过PHP,你会发现,Python的列表与PHP的索引数组非常相似,但是Python可以提供切片等强大的操作,这一点对PHP数组来说,可能要通过函数来实现。
但是,PHP数组除了索引数组,也支持字典存储,而Python要实现字典存储,则需要另外一个数组类型:字典数据类型
PHP数组=Python列表+Python字典;当然,这种理解并不一定准确!
1 创建列表
列表的创建非常简单,使用[]或list()便可创建一个列表。
1.1 使用[]创建,并初始化列表。
mylist = [1,2,3,4,5] #初始化
print mylist #结果:[1,2,3,4,5]
1.2 使用list方法创建列表
mylist = list("12345")
print mylist #结果:[1,2,3,4,5]
注意,list只允许传递字符串或元组。创建好列表之后,便可以通过索引访问,如
print mylist[2] #结果:3
2 列表赋值
在创建完列表或调用函数得到一个返回的列表之后,我们可能需要改变列表中某个元素的值,可以通过赋值来实现,python不只支持单个元素赋值,也支持通过索引范围,对多个元素进行赋值。
2.1 单元素赋值
mylist[1] = 100 #赋值给index=1的元素
2.2 多元素赋值
mylist[1:3] = 10,11,12 #赋值给index=1,2,3的元素
3 添加与删除操作
Python列表为可变类型,这意味着,我们不单可以改变列表中某个元素的值,也可以添加或删除Python中的元素
3.1 添加元素
3.1.1 append函数
使用列表内置append()函数在列表末尾添加元素
mylist.append(6)
mylist.append(7)
print mylist #结果:[1,2,3,4,5,6,7]
mylist.append(['a','b']) #结果:[1,2,3,4,5,6,7,['a','b']]
3.1.2 extend()函数
mylist.extend([8,9,10])
print mylist #结果[1,2,3,4,5,6,7,8,9,10]
注意mylist.extend([8,9,10])与mylist.append(['a','b'])的区别
extends()函数只接收序列数据类型,如果元组或字符,并把序列的每个元素加入到列表中
而append()函数,则允许接收任何对象,并将该对象作为列表的一个元素放入到列表的末尾。
3.1.3 insert()函数
mylist = [1,2,3,4,5]
mylist.insert(2,'a')
print mylist #结果:[1,2,'a',3,4,5]
3.2 删除元素
3.2.1 按索引删除元素
index = 1
x = mylist.pop(index)
print x #结果:
print mylist #结果:[1,3,4,5,6,7]
3.2.2 按值删除元素
mylist = ['a','b','b','a']
mylist.remove('a')
print mylist #结果,['b','b','a']
3.3 删除列表
del mylist
print mylist #报错:NameError: name 'mylist' is not defined
4 列表的长度与索引
列表长度
列表的长度可以使用内置函数len()获取
print len(mylist) #结果:5
列表的索引从0开始,因此索引的取值范围是
0<=index<=len-1
当索引超过取值范围时,会报list assignment index out of range的错误。
列表也支持负数索引来获取元素值,负数索引的取值范围
-len<=index<-1
序列索引最大值为序列长度-1
#获取第一个元素
print mylist[0] #结果1
print mylist[len] #结果:1
#获取最后一个元素
print mylist[len-1] #结果:7
print mylist[-1] #结果:7
5 序列的基本操作
5.1 元素判断
有时候,我们需要判断某个对象是否存在于列表当中,可以使用in和not in来进行判断
x in list: x元素在list中,返回True,否则,返回False
x not in lit:x元素不在list中,返回True,否则,返回False
if 1 in mylist :{
print "Yes"
}
if 100 not in mylist:{
print "Yes"
}
5.2 连接
列表中实现了+的重载,对多个列表使用+运算时,可以起到连接的效果
list1+list2:list1连接list2,返回两个序列连接后的结果
mylist1 = [1,2,3,4,5]
mylist2 = [a,b,c,d,e]
mytolist = mylist1+mylist2
print mytolist #结果[1,2,3,4,5,6,a,b,c,d,e]
5.3 复制
与+运算类似,列表对 * 也实现了重载,使用*可以对列表按指次数进行复制操作,非常方便
list*time:将list复制time次,返回复制后的结果
print mylist * 2 #复制两次,结果[1,2,3,4,5,1,2,3,4,5]
5.4 切片
切片允许我们通过索引范围来读取列表中的数据,通过切片,我们可以访问、复制列表的数据片断。切片操作的格式为[:]或[::],具体如下。
[:]:获取列表的所有元素
[::]:获取列表的所有元素
[start_index:]:获取列表start_index索引到列表末尾的所有的元素
[:end_index]:获取列表end_index索引到列表末尾的所有的元素
[start_index:end_index]:切片
[start_index:end_index:step]:通过步长索引step扩展切片操作
mylist = [1,2,3,4,5,6,7,8,9,10]
print mylist[:] #获取全部,结果:[1,2,3,4,5,6,7,8,9,10]
print mylist[::] #获取全部,结果:[1,2,3,4,5,6,7,8,9,10]
print mylist[5:] #结果:[6,7,8,9,10]
print mylist[:5] #结果:[1,2,3,4,5]
print mylist[3:6] #结果:[4,5,6]
print mylist[::2] #每隔1个元素取一个元素出来,结果:[1, 3, 5, 7, 9]
注意,切片操作从start_index开始获取元素,到end_inde结束,但获取的元素里面,不包含end_index索引对应的元素值,即获取元素的索引范围是start_index至end_index-1
5.5 排序
我们可以调用python内置函数sorted()对列表进行排序,也可以使用列表内置的sort()方法对列表进行排序,sorted与sort的区别在于,sorted对列表进行排序后,返回一个已经排序的列表而不影响原来的列表,而sort则通过直接改列表来实现排序。
mylist = [10,3,2,1,5,4,3,9]
mylist2 = sorted(mylist) #排序
print mylist2 #结果:[1, 2, 3, 3, 4, 5, 9, 10]
print mylist #不变,结果:[10,3,2,1,5,4,3,9]
mylist.sort() #排序
print mylist #改变,结果:[1, 2, 3, 3, 4, 5, 9, 10]
5.6 列表翻转
print mylist[::-1] #翻转序列
mylist.reverse() #翻转序列
6 遍历列表
for x in mylist:
print x
for index in range(len(mylist))
print mylist[index]