列表(list)

列表

概述:列表是可修改的,这意味着列表适用于动态处理元素的情形。
python支持一种数据结构的基本概念,容器。容器基本上就是可包含其他对象的对象。两种主要的容器序列(如列表和元组)和映射(如字典)。在序列中,每个元素都有编号,而在映射中,每个元素都有名称(键)。set既不是序列也不是映射的容器。

常用序列操作

几种操作适用于所有序列,包括索引切片相加相乘成员资格检查迭代,以及一些内置函数用来确定序列的长度以及找出序列中最大和最小的值。

索引

#初始化列表
>>> lst = list()

#下标索引操作,python中list的索引从0开始
>>> lst = [1,2,3]
>>> lst[1]
2

 
#负数索引表示从后往前,由-1开始,-1表示最后一个元素
>>> lst[-1]
3
>>> lst[-2]
2

#如果索引超出范围,将引发IndexError

切片(slicing)

访问特定范围内的元素
lstt = [1,2,3,4,5]
左开右闭的,且元素下标从左往右是从0开始,从右往左是从-1开始
起始位置:结束位置:步长

>>> lstt[::-1]    #取反,与reverse方法效果一样
[5, 4, 3, 2, 1]

>>> lstt[2:5]   #左开右闭
[3, 4, 5]

>>> lstt[-3:]   #列表的后3个元素
[3,4,5]

>>> lstt[:3] #列表的前3个元素
[1,2,3]

>>> lstt[:]  #复制整个序列
[1,2,3,4,5]

更大的步长:
步长默认为1,可定义大小

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

>>> lst[-4:8:-2]
[6]

当步长为正数时,起始索引的元素位于第二元素位的后面,结果就为空序列。

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

当步长为负数时,起始元素位于第二位元素的前面时,结果为空序列

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

序列相加

使用+号进行拼接序列

>>> a=[1,2]
>>> b=[3,4]
>>> a+b
[1,2,3,4]
>>> a + 'hello'
TypeError: can only concatenate list (not "str") to list

不能拼接不同类型的序列。

乘法

将序列与整型X相乘时,将重复这个序列x次来创建一个新序列

>>> a=[1,2]
>>> b=[3,4]
>>> a * b
TypeError: can't multiply sequence by non-int of type 'list'

>>> a * 3
[1,2,1,2,1,2]

空列表None
None表示什么都没有,如表示还有在列表中添加任何内容。如将列表长度初始化为10:

>>> a = [None]*10
>>> len(a)
10
>>> a
[None, None, None, None, None, None, None, None, None, None]
>>> d[0]=10
>>> d
[10, None, None, None, None, None, None, None, None, None]
>>> d[1]    #为空
>>>

成员资格

要检查特定的值是否存在于序列中,可使用in,满足时返回True,不满足时返回False。检查特定的值不存在于序列中可使用not in

>>> permissons = 'rw'
>>> 'r' in permissons   #检查 文件权限
True
>>> 'x' not in permissons
True
>>> user = ['jerry','tom'] #检查用户是否在序列中
>>> 'marry' in user
False

1.1列表的操作

  • 增: append,insert,extend
  • 删: pop,clear,remove,del
  • 改: reverse,sort
  • 查: count,index
  • 复制: copy
#赋值和修改列表
>>> lst = [1,2,3]
>>> lst[1] = 10
>>> lst
[1,10,3]

>>> lst[3] = 11
IndexError ....

#修改元素的时候,如果超出索引范围,也会引发IndexError,不像有的语言超出索引范围后会自动增加。python则不会,直接报错

append

结尾追加一个元素

>>> lst = [1,2,3,4]
>>> lst.append(5)
>>> lst
[1,2,3,4,5]

append方法直接就地修改列表,没有返回值


insert

将一个对象插入列表。操作的索引超出范围,如果是正索引,等效于append。如果是负索引,等效于insert(0,object),新增index为0元素为object,原列表所有index+1

insert O(n) append O(1)

>>> lst = ["to","be","or","not","to","be"]
>>> lst.insert(0,"walter")
>>> lst
['walter', 'to', 'be', 'or', 'not', 'to', 'be']

>>> lst.insert(-1,"walter")
>>> lst
['walter', 'to', 'be', 'or', 'not', 'to', 'walter', 'be']

extend

同时将多个值附加到列表末尾

>>> lst = ["my","name","is"]
>>> lst.extend(["walter"])
>>> lst
['my', 'name', 'is', 'walter']

这可对能看起来类似于拼接,但拼接是返回一个全新的序列

>>> lst = ["my","name","is"]
>>> name = ["walter"]
>>> lst + name
['my', 'name', 'is', 'walter']
>>> lst
["my","name","is"]

也可使用lst = lst + ["walter"]的方式,但是效率将比extend方法低
达到相同的extend效果还可以使用lst[len(lst):]=name,但此种可性较低。


###del 删除指定索引的元素 ``` >>> lst = [1,2,3] >>> del lst[1] >>> lst [1,3]

###pop
删除任意单个元素,并且是根据index来删除,并且index超出范围即会报错。默认为最后一个元素。

lst = [1,2,3,4]
lst.pop(1)
2
lst
[1,3,4]
lst.pop(100)
Index error..... range

pop是唯一修改列表又返回一个非None值的列表方法

<br />
###remove
删除任意单个元素,并且是根据元素的值来进行删除。只会从左往右删除第一个值

lst = [1,2,3,4,2]
lst.remove(2)
lst
[1,3,4,2]

<br />
###clear 
方法删除所有的元素

lst = [1,2,3,4,2]
lst.clear()
lst
[]

<br />


###count
计算指定的元素在列表中出现了多少次

a = ["to","be","or","not","to","be"]
a.count("to")
2
a = [1,2,3,[1,2],[1,2,[1,2]]]
a.count([1,2])
1

<br />

###index
在列表中查找指定值第一次出现的索引

lst = ["to","be","or","not","to","be"]
lst.index("to")
0


<br />

###copy 
复制列表,常规复制保是将另一个名称关联到列表上。copy会重新分配一块内存。

a = [1,2,3]
b = a
a[0] = 4
b
[4,2,3]

a = [1,2,3]
b = a.copy()
a[0] = 4
b
[1,2,3]
a
[4,2,3]

也可使用`a[:]`和`list(a)`相同的效果

<br />

###reverse
按相反的顺序排列列表中的元素

lst = [1,2,3]
lst.reverse()
lst
[3,2,1]

lst=list(reversed(lst))
lst
[1,2,3]

reversed函数返回一个迭代器,在用list函数转换为列表达到一样的效果
<br />

###sort
对列表就地排序,也就是修改原列表

lst = [3,2,1]
lst.sort()
lst
[1,2,3]

高级用法:

help(lst.sort)
sort(...) method of builtins.list instance
L.sort(key=None, reverse=False) -> None -- stable sort IN PLACE

`key`参数有很多,这里只介绍一种`len`,按照列表元素长度进行排序。reverse取反只有`True`和`False`两个参数,

lst = ["sort","reverse","index","insert"]
lst.sort()
lst
['index', 'insert', 'reverse', 'sort']

lst.sort(key=len)
lst
['sort', 'index', 'insert', 'reverse']

lst.sort(key=len,reverse=True)
lst
['reverse', 'insert', 'index', 'sort']


sorted函数返回一个列表,可以直接赋值

lst = [3,2,1]
lst1 = sorted(lst)
lst1
[1,2,3]
lst
[3,2,1]

posted @ 2019-03-20 09:03  dance_man  阅读(285)  评论(0)    收藏  举报