在介绍列表前,我们的先介绍一个关键词:序列。序列是python中最基本的数据结构。所谓的序列,指的是可以连续存放多个值的内存空间,序列中的每个元素都会有一个数字,即它的位置或索引。通过这个索引就能找到序列中的元素 。
在python的序列中,包括列表,字符串,元组,集合和字典。序列支持几个通用的操作,就是可以索引、切片、相加、相乘、检查成员,需要注意的是,集合和字典不支持索引,切片、相加和相乘操作。
序列又包括有序序列和无序序列 。而我们要讲的列表:list就是一种有序的序列 ,可以对其中元素进行增删改查。
创建列表
创建列表有两种方式:分别是通过[]中添加元素和list()创建 。
通过[]创建时,列表中的每个元素需要通过逗号隔开。列表中的每个元素可以是整数、字符串、布尔值,空值、列表、元组等任意一种数据类型。
lst1 = ['red',10,12.3]
lst2 = ['blue', None,True,['a','b'],('abc',123)]
print(lst1)
print(lst2)
运行结果
['red', 10, 12.3]
['blue', None, True, ['a', 'b'], ('abc', 123)]
我们还可以通过list()方法创建列表,如下
lst3 = list() #创建了一个空列表
lst4 = list(['green',10,12.3])
print(lst3)
print(lst4)
运行结果
[]
['green', 10, 12.3]
访问列表
访问列表的元素可以通过下标(也叫索引),默认下标从0开始递增,也就是从左往右递增。当然也可以从右向左计数,这样的话最后一个元素就是从-1开始,依次类推。这也是序列中的一个特性 。
lst = ['red', 10, 12.3]
print("第一个元素:",lst[0]) #输出:red
print("第三个元素:",lst[-1]) #输出12.3
以下是列表中通过下标访问元素的示意图。

以上只是访问列表中某一个元素,那如果我想访问列表中多个元素,那就可以使用序列的另一个特性:切片。切片操作相当于是在列表中访问一定范围的元素,通过切片操作,其实相当于返回了一个新列表 ,这个列表是原来列表的子集。
切片的语法格式如下:
lst[start:end:step]
- lst:表示列表的名称;
- start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,默认为 0,也就是从列表的开头进行切片;
- end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为列表的长度,注意end不能超过列表的长度,否则会报错;
- step:表示切片的步长,如果 step 的值大于 1,则在进行切片操作时,会“跳跃式”的取元素。如果省略设置 step 的值,step的值就为1,则最后一个冒号就可以省略。
lst5 = ['red','green','blue','black','gold','orange']
print("获取第2-5个元素:",lst5[1:5]) #有start,end,没有step,默认为1
print("获取第2,4,6个元素:",lst5[1:6:2]) #从第2个元素到第7个元素,遵循左臂右开原则,不包括第7个
print("获取第1,3,5个元素:",lst5[::2]) #步长为2
print("获取第3个及后面的元素:",lst5[2:])
print("将列表翻转:",lst5[::-1])
运行结果:
获取第2-5个元素: ['green', 'blue', 'black', 'gold']
获取第2,4,6个元素: ['green', 'black', 'orange']
获取第1,3,5个元素: ['red', 'blue', 'gold']
获取第3个及后面的元素: ['blue', 'black', 'gold', 'orange']
将列表翻转: ['orange', 'gold', 'black', 'blue', 'green', 'red']
更新列表
列表更新包括:
- 修改列表中某一个元素的值,通过列表下标直接赋值 。
- 向列表中插入一个元素,通过list.insert(index, obj)方法,可以向列表的某一个位置插入元素
- 向列表中追加一个值,通过list.append(obj)方法,添加的元素将放到列表的最后。
- 向列表中追加多个值 ,通过list.extend(seq)方法,将添加的值放到列表的最后。extend()方法要传入一个序列 。
# 列表更新
# 1) 更新列表中某一个元素
lst6 = ['red','green','blue']
lst6[1] = 'yellow'
print("更新元素后的列表:",lst6)
# 2) 向列表中位置3插入一个元素
lst6.insert(2,'cream')
print("插入元素后的列表:",lst6)
# 3) 向列表追加一个元素
lst6.append('gunmetal')
print("追加元素后的列表:",lst6)
# 4) 向列表追加多个元素
lst6.extend(["sand","stone","wine"])
print("向列表中追加三个元素:",lst6)
运行结果
更新元素后的列表: ['red', 'yellow', 'blue']
插入元素后的列表: ['red', 'yellow', 'cream', 'blue']
追加元素后的列表: ['red', 'yellow', 'cream', 'blue', 'gunmetal']
向列表中追加三个元素: ['red', 'yellow', 'cream', 'blue', 'gunmetal', 'sand', 'stone', 'wine']
删除列表
删除列表也可以包括:
- 移除列表中某一个元素,通过list.pop(index=-1))方法,并且返回该元素的值。不指定索引返回最后一个值。
- 移除列表中某个值的第一个匹配项,list.remove(obj)
- 清空列表内的所有元素,list.clear()
- 删除列表,del lst_name
lst7 = ['red', 'yellow', 'cream', 'blue', 'gunmetal']
lst7.pop(1)
print("删除第二个元素后的列表:",lst7)
lst7.remove('blue')
print("删除元素blue后的列表:",lst7)
lst7.clear()
print("清空列表中所有的元素:",lst7)
del lst7 #使用del后列表将被删除,所以无法打印
运行结果
删除第二个元素后的列表: ['red', 'cream', 'blue', 'gunmetal']
删除元素blue后的列表: ['red', 'cream', 'gunmetal']
清空列表中所有的元素: []
其它操作
除了以上对列表的操作外,我们还可以通过序列中的特性,如相加、相乘、检查成员对列表进行操作
列表相加相乘
#列表相加,相乘
a_list = ['abc']
b_list = ['xyz']
c_list = a_list + b_list
print("两个列表相加后产生的新列表:",c_list)
print("列表a_list乘3后产生的新列表:",a_list*3)
运行结果:
两个列表相加后产生的新列表: ['abc', 'xyz']
两个列表相乘后产生的新列表: ['abc', 'abc', 'abc']
检查列表中的元素
检查列表是否存在某个元素可以in关键字 ,同理也可以not in检查元素不在列表中,他们返回的结果是boolean值。
lst8 = ['red', 'yellow', 'cream', 'blue', 'gunmetal']
print("检查列表lst8中是否包含blue元素:",'blue' in lst8)
print("检查列表lst8中是否不包含black元素:",'blac' not in lst8)
运行结果:
检查列表lst8中是否包含blue元素: True
检查列表lst8中是否不包含black元素: True
总结
列表是Python中的一个重要知识点,使用python的朋友基本都会和它打交道。而以上那么多对列表的操作方法又不容易记,故将所有对列表的操作的方法都整理到一个表中,方便查阅。

元组
元组是python的另外一种数据类型,和列表相比,它也是一个有序的集合。
元组和列表的差异
- 相同点:
- 列表和元组都是有序列表
- 列表和元组的元素都是通过逗号隔开
- 都支持存放不同数据类型的数据
- 不同点
- 定义不同,列表使用[],元组使用()
- 列表是可变序列,元组是不可变列表 ;即列表中的元素可以进行增、删、改、查,而元组的元素一旦定义就不能进行修改,只能查询元素 。也正是由于这个特性,元组比列表更加更全,假如你定义的数据不希望被别人修改时,那么就可以定义为元组 。
创建元组
元组的创建也有两种方式:分别是通过()创建和tuple(data)创建 。注意,使用tuple创建元组时,里面的data可不传,如果传入data需是一个迭代器,如列表,元组。
具体格式为:
tp = () #第一种创建方式
tp1 = tuple() #第二种创建方式
给元组中添加元素
# 1.元组创建
tp1 = ('xyz','abc')
tp2 = tuple(('xyz','abc'))
tp3 = tuple(['xyz','abc'])
tp4 = tuple(range(5))
print("tp1 =",tp1)
print("tp2 =",tp2)
print("tp3 =",tp3)
print("tp4 =",tp4)
运行结果:
tp1 = ('xyz', 'abc')
tp2 = ('xyz', 'abc')
tp3 = ('xyz', 'abc')
tp4 = (0, 1, 2, 3, 4)
访问元组
因为元组也属于序列,所以它也可以索引和切片来访问 。
#2 .访问元组
tp5 = ('xyz','abc','tab','jxp')
print("获取第一个元素:",tp5[0]) #索引获取
print("获取中间2个元素:",tp5[1:3]) #切片获取
运行结果:
获取第一个元素: xyz
获取第后面2个元素: ('abc', 'tab')
元组也同样支持序列中的方法,如len(tp),相加、相乘、检查等操作 ,这里就不在赘述 ,具体可查看列表。
更新元组
元组一旦创建,元组中的元素就无法修改,但是我们也可以对元组重新赋值或通过相加给元组添加新元素 。
# 3.元组修改
tp6 = ('xyz','abc','tab','jxp')
print("原来元组中的元素:",tp6)
tp6 = ('red',10,12.3)
print("赋值后元组中的元素:",tp6)
tp7 = ('www.baidu.com','www.163.com')
tp8 = tp6 + tp7
print("新的元组:",tp8)
运行结果:
原来元组中的元素: ('xyz', 'abc', 'tab', 'jxp')
赋值后元组中的元素: ('red', 10, 12.3)
新的元组: ('red', 10, 12.3, 'www.baidu.com', 'www.163.com')
删除元组
删除元组通过del关键字,使用格式:del tuple
tp9 = ('xyz','abc','tab')
del tp9 #注意:删除后的元组就无法打印,否则会报错。