list列表
list可以放入数字、字符串等数据类型,可以同时放入任意类型的数据
列表的创建
1 基本语法创建
>>> l=[10,'w','','mi']
>>> L=[]#创建空列表
2 list()创建
使用list()可以将任何可迭代数据转化成列表
>>> a=list()
>>> b=list(range(10))
>>> c=list("mijing")
>>> print(a)
[]
>>> print(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(c)
['m', 'i', 'j', 'i', 'n', 'g']
3 range()创建整数列表
range([start,]end[,step])
start,可选,默认为0
end,必选
step,可选,默认为1
range()返回的是一个range对象,需用list()方法转换
>>> list(range(3,10,2))
[3, 5, 7, 9]
4 推导式
>>> a=[x*2 for x in range(5)]#循环创建多个元素
>>> print(a)
[0, 2, 4, 6, 8]
>>> b=[x*2 for x in range(100) if x%9==0]#if过滤
>>> print(b)
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
访问
list.index(x)
返回第一个x的位置,若不存在则抛出异常
>>> L=['h','e','l','l','o','w','o','r','d']
>>> L.count('o') #计算单个字母出现的次数
2
>>> L.index('o')
4
Python按顺序访问list
列表是有序的,因此我们可以按顺序访问列表中的元素。
列表遍历
>>> for item in L :
... print(item)
...
h
e
l
l
o
w
o
r
d
事实上字符串也可以看作是一种特殊的列表,它只能按顺序存放多个字符。通过for循环访问列表每一个元素的方式,我们称为迭代。
Python按索引访问list
>>> L[3]
'l'
>>> L[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
超出范围,抛出异常
由于列表list是一个有序的容器,所以在list里面,每一个元素都有一个唯一的位置,我们称之为索引(index),这和字符串是类似的,因此我们也可以通过位置的方式获取list中的元素
注意,这里要注意区分,列表的定义也是通过中括号[]
来定义的,但这和通过索引访问列表里面的元素并不冲突
列表和字符串一样,也支持切片,通过切片的方式,获取到列表的子列表。
如果我们越界切片的话,不会出现Python运行错误,但是按照这样的下标去切片,获取不到任何元素。
>>> L[2:6]
['l', 'l', 'o', 'w']
Python倒序访问list
Python的列表,除了支持正向顺序索引获取列表中的每一个元素以外,也支持倒序访问list中的每一个元素。
>>> L[::-1]
['d', 'r', 'o', 'w', 'o', 'l', 'l', 'e', 'h']
增加元素
list.append(x)
加到列表的末尾:
>>> L.append('.')
>>> print(L)
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd', '.']
list.insert(index,x)
需要两个参数,分别是需要插入的位置,以及需要插入的元素。
>>> L.insert(5,',')
>>> print(L)
['h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'd', '.']
list.extend(alist)
将列表alist加到列表尾部
>>> alist=['h','i']
>>> L.extend(alist)
>>> print(L)
['h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'd', '.', 'h', 'i']
删除元素
del
- 根据索引删除;
>>> L=['h','e','l','l','o','w','o','r','d']
>>> del L[4]
>>> L
['h', 'e', 'l', 'l', 'w', 'o', 'r', 'd']
- 删除索引范围内的元素;
>>> L=['h','e','l','l','o','w','o','r','d']
>>> del L[0:4]
>>> L
['o', 'w', 'o', 'r', 'd']
- 删除整个列表,不只是列表内的元素。
>>> L=['h','e','l','l','o','w','o','r','d']
>>> del L
>>> L
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'L' is not defined
del操作没有返回值
list.pop(index)
默认删除列表的最后一个元素,并返回。
>>> L.pop()
'i'
>>> print(L)
['h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'd', '.', 'h']
pop()方法,除了可以删除最后一个元素以外,pop()还可以接收一个参数,指定需要删除的元素的位置。
>>> L.pop(5)
','
>>> print(L)
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd', '.', 'h']
list.remove()
删除首次出现的指定字符
>>> L.remove('l')
>>> print(L)
['h', 'e', 'l', 'o', 'w', 'o', 'r', 'd', '.', 'h']
list.clear()
删除列表中所有元素
>>> L.clear()
>>> print(L)
[]
翻转列表
所有元素原地翻转
>>> L=['h','e','l','l','o','w','o','r','d']
>>> L[::-1] #未改变L的内容
['d', 'r', 'o', 'w', 'o', 'l', 'l', 'e', 'h']
>>> L.reverse() #改变了L的内容
>>> print(L)
['d', 'r', 'o', 'w', 'o', 'l', 'l', 'e', 'h']
切片
[:]提取整个列表
[start:]从start索引开始到结尾
[:end]从头开始直到end-1
[start:end]从start到end-1
[start: end :step]
[::-1]步长为负,从右到左反向提取
超出范围不会报错
>>> L=['h','e','l','l','o','w','o','r','d']
>>> L[:]
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd']
>>> L[3:]
['l', 'o', 'w', 'o', 'r', 'd']
>>> L[:3]
['h', 'e', 'l']
>>> L[2:6]
['l', 'l', 'o', 'w']
>>> L[2:6:2]
['l', 'o']
>>> L[::-1]
['d', 'r', 'o', 'w', 'o', 'l', 'l', 'e', 'h']
成员资格判断
in
>>> 'm' in L
True
count
>>> L.count('s')
0 #等于0不存在
>>> L.count('i')
2 #不等于0存在
列表长度
len(L)
>>> len(L)
9
for循环
>>> num = 0
>>> for item in L :
... num+=1
...
>>> print(num)
9
计数
list.count(x)
返回指定元素x在列表中包含的个数
>>> L.count('l')
2
Python替换list中的元素
通过索引指定位置,并赋值新的元素,即可替换列表中原有的元素。
>>> L=['h','e','l','l','o','w','o','r','d']
>>> L[2]='a'
>>> print(L)
['h', 'e', 'a', 'l', 'o', 'w', 'o', 'r', 'd']
列表的复制
>>> a=['h', 'e', 'l', 'l', 'o']
>>> b=a
>>> print(a)
['h', 'e', 'l', 'l', 'o']
>>> c=b*3
>>> print(c)
['h', 'e', 'l', 'l', 'o', 'h', 'e', 'l', 'l', 'o', 'h', 'e', 'l', 'l', 'o']
列表排序
1 修改原列表,不建新列表的排序
>>> L=[30,10,20,40]
#默认是升序排列
>>> L.sort()
>>> L
[10, 20, 30, 40]
#降序排列
>>> L.sort(reverse=True)
>>> L
[40, 30, 20, 10]
#打乱顺序
>>> import random
>>> random.shuffle(L)
>>> L
[40, 10, 30, 20]
2 建新列表
>>> L=[30,10,20,40]
>>> id(L)
1786666684864
>>> L=sorted(L)
>>> L
[10, 20, 30, 40]
>>> id(L)
1786666685184
3 reversed()返回迭代器
不对原列表做任何修改,只是返回一个逆序排列的迭代器对象
>>> c=[20,10,30,40]
>>> a=reversed(c)
>>> list(a)
[40, 30, 10, 20]
>>> list(a)
[]
4 max() min() sum()
只适用于列表
>>> a=[3,10,7,6]
>>> max(a)
10
>>> min(a)
3
>>> sum(a)
26
Python二维list
对于二维list,列表里面的每一个元素仍然是一个列表
>>> L=['a','b','c',['h', 'e', 'a', 'l', 'o', 'w', 'o', 'r', 'd'],'d','e']
>>> L[3]
['h', 'e', 'a', 'l', 'o', 'w', 'o', 'r', 'd']
两层嵌套