python序列之列表详解(python中序列的通用操作)
Python中除了字符串外,还有另外两种序列:列表和元组,他们都可以包含零个或多个元素,而且并不要求所含元素的类型相同,每个元素都可以是任何Python类型对象。
为什么Python要同时设计列表和元组这两种序列结构呢?这是因为元组和字符串类似是不可变的,当你给元组赋值时,这些值便会被固定在元组中而无法修改。而列表是灵活可变的,可以随意插入或者删除其中的元素,结构更灵活,用处也更强大。
一:列表创建
使用[ ]或者list[ ]创建列表
number=[1,2,3]
s=['lily','jude']
mix=[1,'hello',[1,2,3],3.14] #混合列表
empty=[] #也可以创建一个空的列表
> list('jude') # 使用list函数创建
['j','u','d','e']
二:列表操作
2.1,通过索引获取元素,索引值从0开始
name=['lucy','lily',['china','usa'],'007','anna','mei']
name[0] >>> 'lucy'
name[1] >>> 'lily'
name[-1] >>> 'mei' #获取最后一个元素,依次类推
name[2][1] >>>'usa' #针对嵌套的列表结构,可多次通过索引获取
2.2,列表分片获取
当需要从列表一次性取出多个元素时,需要通过列表分片的方式来实现,
其基本形式是:列表名[左索引值:右索引值],左右索引值都可以省略,
左索引值省略时表明,列表元素从0开始,右索引值省略表示包含左索引值右边的所有元素。
注意:分片其实是创建原列表的一个拷贝
member = ['php','python','java','sql']
member[1:3] >>>['python','java'] #member本身元素并没有发生变化,相当于生成了包含元素1和2的新列表
member[:3] >>>['php','python','java'] #表示从第0个索引值开始
member[1:] >>>['python','java','sql'] #表示从左索引值开始到列表右边所有元素
member[:] >>>['php','python','java','sql'] #相当于复制了一份原列表
分片操作可以接收第三个参数,也就是步长,格式如下:[start:end:step],
step在不指定时默认为1
numb=[1,2,3,4,5,6]
numb[0:6:2] >>>[1,3,5]
numb[::2] >>>[1,3,5]
numb[::-1] >>>[6,5,4,3,2,1] #相当于复制一个反转的列表
2.3,列表复制
三种方法都可以将一个列表的值复制到一个新的列表
- copy()函数 用于拷贝一个列表
- list()函数转换
- 列表分片[ : ]
list1 = [123,456]
list2 = list1.copy()
#则list2的值也变为[123,456] 它的功能和列表分片功能 list2 = list1[:]作用是一样的;
#他们两个与赋值运算符=是有区别的,前者是在内存中重新申请一个空间并存放列表的值,
=则是将列表的地址直接赋值给了另一个列表,
举例说明两者带来的区别:
list1 = [1,3,5]
list2 =list1
list3 = list1.copy()
list1.append('python')
list2 >> [1,3,5,'python']
list3 >> [1,3,5]
2.4,列表排序
经常需要将列表按元素值进行排序,python提供了两个函数
- list.sort(reverse=False) :直接改变原列表结构,默认升序排列,
- sorted(list) :返回排序后的结果,相当于复制了一个列表,原列表不变
如果列表中元素都是数字,会默认安装从大小大的升序排列,如果元素都是字符串,则会按照字母表顺序排列。
进阶用法:
sort(func,key,reverse) func和key分别设置排序的算法和关键字,
reverse=False表示正序排列,为True颠倒顺序,默认正序
a=[1,5,3,99,6]
a.sort()
a >> [1,3,5,6,99]
sorted(a) #内置函数sorted,返回排序后的结果,相当于复制了一个列表,原列表不变
>> [1,3,5,6,99]
2.5,添加元素
- append(str):添加元素至列表尾部
- extend([]):将一个列表合并到另一个列表中,等价于 +=
- insert(index,str):在指定位置插入元素
>>> number=['lucy','lily']
#append函数将元素添加到列表末尾
>>> number.append('007')
['lucy','lily','007']
#extend函数将列表添加到列表的末尾
>>> number.extend(['anna','mei']) #等价于 number+=['anna','mei']
['lucy','lily','007','anna','mei']
#insert()方法
>>> number.insert(0,'ken')
['ken','lucy','lily','007','anna','mei']
**连接操作符,两个列表直接相加可以得到合并之后的新列表
a,b=[1,2],[3,4]
>>> a+b
[1,2,3,4]
>>> a*2
[1,2,1,2]
2.6 删除列表元素
- remove(str):删除指定值的元素
- del(index) : 删除指定位置的元素
- pop(num=-1) :删除指定位置的元素(默认删除最后一个元素),该函数返回删除的元素
- clear() :用于删除列表中的所有元素,变成一个空的列表
name=['lucy','lily','007','anna','mei']
>>> name.remove('lucy')
['lily','007','anna','mei']
>>> del name[1]
['lily','anna','mei']
>>> name.pop()
'mei'
>>> name
['lily','anna']
>>> name.pop(1)
'anna'
>>> name
['lily']
list1 = [1,1,2,3,4]
>>> list1.clear()
>>> list1
[]
2.7,使用in判断值是否存在
判断列表中是否存在该元素,存在返回True
name=['lucy','lily','007','anna','mei']
>>> '007' in name
True
2.8,使用join()转换为字符串
注意:join()其实是字符串方法,不是列表的方法,不能通过suit.join()进行调用。
join() 是字符串分割split()的逆过程
suit=['apply','orange','peer']
>>> '# '.join(suit)
'apply# orange# peer'
2.9,元素计数
使用count()可以计算某一个特定元素在列表中出现的次数
#count计算参数在列表中出现的次数
list1.count(1) >>> 2
2.10,获取列表长度及列表反转
- len():返回列表的长度
- reverse():没有返回值,对原列表的进行反转而不是复制一个
list1=[1,2,3,1,4]
#计算元素个数
>>> len(list1)
5
#列表反转
>>> list1.reverse()
>>> list1
[4, 1, 3, 2, 1]