文章目录
- 一.初识列表
- 二.列表的创建
- 三.列表的索引和切片
- 3.1.索引
- 3.2.切片
- 四.操作列表
- 4.1.增
- 4.2.删
- 4.3.改
- 4.4.查
- 4.5.其它常用操作
- 4.5.1.获取列表长度
- 4.5.2.列表拼接
- 4.5.3.数值列表的统计操作
- 4.5.3.对列表的翻转
- 4.5.4.列表排序
- 五.列表解析
- 六.结语
一.初识列表
列表是python中比较重要的一种数据类型,它也是python中用途最为广泛的数据类型之一,对于列表我们首先要有如下认知:
- 列表中是一种可变数据类型,即列表中的元素可以随意修改;
- 列表中的元素是有序的;
- 列表的元素写在方括号[]之间,各元素用逗号分隔,各个元素可以是各种类型的数据[],例如列表,元组,字典,字符串,数字等等。
二.列表的创建
列表有许多的创建方法:
- 直接使用lst=[element1,element2,element3,…elementn]的形式
- 使用list()方法将其它的数据类型转换为列表
- 通过列表解析利用其它可迭代对象来创建列表
- 通过深拷贝操作来利用已知列表创建新列表
下面是上述方法的代码示例
import copy
#最简单直接的列表创建方法lst=[...]
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
print(lst)
'''
运行结果:
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
'''
#通过list方法
lst1=list(range(0,10))
print(lst1)
'''
运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
'''
#使用列表解析
lst2=[x**3 for x in range(1,10)]
print(lst2)
'''
运行结果:
[1, 8, 27, 64, 125, 216, 343, 512, 729]
'''
#利用深拷贝操作创建新的列表
new_lst=lst[:]#深拷贝方法一
new_lst1=copy.deepcopy(new_lst)#深拷贝方法二
print(new_lst)
print(new_lst1)
'''
运行结果:
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
'''
三.列表的索引和切片
3.1.索引
对于列表而言,倘若想获取指定位置的元素一般都会使用索引,即采用形如lst[index]的形式,列表可以从0开始索引,也可以从-1开始索引。使用后者时-1将索引倒数第一个元素,-2将索引倒数第二个元素,以此类推…,下面是索引的代码示例:
#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#从0开始索引列表
for i in range(len(lst)):
print(lst[i])
'''
运行结果:
abc
1.45
['Tom', 'Jim']
(3.5, 5)
{'country': 'china', 'city': 'chengdu'}
'''
#从-1开始索引列表
index=[-1,-2,-3,-4,-5]
for i in index:
print(lst[i])
'''
运行结果:
{'country': 'china', 'city': 'chengdu'}
(3.5, 5)
['Tom', 'Jim']
1.45
abc
'''
3.2.切片
列表可以通过切片操作来获取列表中的一些元素,切片的表达式为:list[start:stop:step],其中:
- start决定创建的数字列表从那个数字开始,默认为0(可选参数);
- stop决定创建的数字列表到那个数字结束;
- step表示截取步长,即截取的一个数据需要加上该步长再截取(可选参数)。
代码示例为:
#列表的切片操作
lst=list(range(-10,-1,1))
#输出原列表
print(lst)
#截取第4个至第5个数
print(lst[3:5])
#截取前3个数
print(lst[:3])
#从第2个数开始截取,至第六个数结束,截取步长为2
print(lst[1:5:2])
#截取列表最后三个数
print(lst[-3:])
#截取倒数第5个数至倒数第3个数
print(lst[-5:-2])
'''
运行结果:
[-10, -9, -8, -7, -6, -5, -4, -3, -2]
[-7, -6]
[-10, -9, -8]
[-9, -7]
[-4, -3, -2]
[-6, -5, -4]
'''
四.操作列表
4.1.增
往列表中增加元素的方法:
- 使用append()方法往列表末尾添加元素;
- 使用insert(index,obj)往列表指定位置处添加元素。
对应的代码示例为:
#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#使用append往列表末尾添加元素
lst.append(complex(4,5))
print(lst)
#使用insert插入元素到列表的开头
lst.insert(0,-8)
print(lst)
'''
运行结果:
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, (4+5j)]
[-8, 'abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, (4+5j)]
'''
4.2.删
列表中删除元素的方法有:
- 使用del lst[index]方法删除列表中指定索引处的元素,或者直接使用del lst删除整个列表;
- 使用pop()方法可以删除列表的最后一个元素并将删除的元素返回,类似与栈的出栈函数的功能,与栈的出栈操作不同的是:列表的pop方法可以指定列表中任意索引处的元素删除并弹出其值,只需要指定对应的索引即可;
- 使用remove(value)可以将删除列表中值为value的第一个元素,注意这个值一定要在列表中存在,否则将报错ValueError;
代码示例为:
#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#使用del删除列表的第一个元素元素
del lst[0]
print(lst)
'''
运行结果:
[1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
'''
#删除整个列表,这种情况下无法使用print输出lst因为列表都不存在了
del lst
#重新创建列表lst
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#使用pop删除尾部的元素并返回该元素
a=lst.pop()
print(a)
print(lst)
'''
运行结果为:
{'country': 'china', 'city': 'chengdu'}
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5)]
'''
#使用pop删除列表的第2个元素并返回该元素
b=lst.pop(1)
print(b)
print(lst)
'''
运行结果为:
1.45
['abc', ['Tom', 'Jim'], (3.5, 5)]
'''
#使用remove删除列表中值为'abc'的第一个元素
lst.remove('abc')
print(lst)
'''
运行结果为:
[['Tom', 'Jim'], (3.5, 5)]
'''
4.3.改
修改操作对列表而言是比较简单的,因为列表的元素是可以随意修改的,因此只需使用形如lst[index]=new_value就可以修改原列表中的元素。
代码示例为:
#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#修改列表的第一个元素
lst[0]='ABC'
print(lst)
'''
代码运行结果为:
['ABC', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
'''
4.4.查
在python中存在in/not in两个操作符,可以用来判断元素是否存在于/是否不存在于某个列表中,是则返回true。
代码示例为:
#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
new_lst=[(3.5,5),'ABC']
#用循环逐个取出new_lst中的元素并判断在lst中是否存在相同的元素,存在输出该元素在lst中,否则输出该元素不存在
for element in new_lst:
if element in lst:
print("{0} is in lst".format(element))
if element not in lst:
print("Not Exist")
'''
运行结果:
(3.5, 5) is in lst
Not Exist
'''
4.5.其它常用操作
4.5.1.获取列表长度
通过len(lst)可以获取列表lst的长度,示例代码如下:
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
print(len(lst))
'''
运行结果:
5
'''
4.5.2.列表拼接
使用加号+可以对列表进行拼接,示例代码如下:
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
lst1=[1,3.5,'python']
lst+=lst1
print(lst)
'''
运行结果:
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 1, 3.5, 'python']
'''
4.5.3.数值列表的统计操作
数值列表是元素全是数字的列表,我们可以用max(list),min(list),sum(list),list.count(obj)来分别统计列表的最大值,列表的最小值,列表中元素的和,列表中某个元素出现的次数,示例代码如下:
lst=[1,3.5,7,9,2,10,23,2,2]
print(lst)
print('max:',max(lst))
print('min:',min(lst))
print('sum:',sum(lst))
print('{0} exists in lst {1} times '.format(2,lst.count(2)))
'''
运行结果:
[1, 3.5, 7, 9, 2, 10, 23, 2, 2]
max: 23
min: 1
sum: 59.5
2 exists in lst 3 times
'''
4.5.3.对列表的翻转
通过lst.reverse()可以将列表中的元素顺序翻转,示例代码如下:
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
print(lst)
lst.reverse()
print(lst)
'''
运行结果:
['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
[{'country': 'china', 'city': 'chengdu'}, (3.5, 5), ['Tom', 'Jim'], 1.45, 'abc']
'''
4.5.4.列表排序
使用sort(reverse,key)函数可以对列表进行排序,使用该方法将会真正改变列表元素的顺序,对于该函数的两个参数:
- reverse是一个布尔类型的值,为True时将会降序排列,为False时将会升序排列,默认值为False;
- key为排序的标准,可以自定义函数作为排序标准并作为第二个参数传入(可选参数)。
使用sorted(obj,reverse,key)也可以对列表进行排序,但会返回排序后的列表且不改变原来的列表,其参数reverse和key和sort()函数类似。
示例代码如下:
#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#排序函数按元素的长度排序,浮点数的长度为1
def sortCritera(e):
if type(e)==float:
return 1
else:
return len(e)
#使用sort方法指定降序排序,排序按元素的长度
lst.sort(reverse=True,key=sortCritera)
print(lst)
#使用sorted进行升序排序,使用sorted排序后lst不变
newlst=sorted(lst,key=sortCritera)
print(lst)
print(newlst)
'''
运行结果:
['abc', ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 1.45]
['abc', ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 1.45]
[1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 'abc']
'''
五.列表解析
列表解析可以让我们通过其它可迭代对象来创建一个列表,列表解析的语法为:expression for iter_val in iterable if condiction,expression为最后执行的结果即保存在列表中的元素,后面的循环语句可以有多个,可以嵌套循环,if表达式也可以有多个。
#先创建列表x,再利用列表解析创建y,最后利用x,y使用列表解析创建z
x=list(range(1,10))
y=[i**2 for i in x]
z=[(a,b) for a,b in zip(x,y)]
print(z)
'''
运行结果:
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81)]
'''
要想更深刻的理解列表解析可以参见文章:python笔记_列表解析
六.结语
上述介绍基本上攘括了python列表的所有常见用法,当然列表的功能远不及如此,例如列表可以当作堆栈来使用(其中append函数可以当做入栈来使用,pop函数可以当作出栈函数来使用),列表也可以当作队列使用等等。我们对列表的熟练只有建立在多用且要灵活应用的基础上。