列表是可变的序列,能够保存任何数据类型,用[]来表示列表。
一、列表创建
- 创建空列表
a = []
b = list()
二、访问列表元素
- 根据索引取元素(索引从0开始计数,-1表示最后一位)
a = [1,2,3,4,5]
print(a[0],a[2],a[-1]) #结果1,3,5
- 切片取元素(返回列表)
>>>a = [1,2,3,4,5]
>>>a[1:3] #相当于取出a[1]到a[3]的值但不包括a[3],简单理解就是顾头不顾尾
[2, 3]
>>>a[0:2]
[1, 2]
>>>a[:2] #这里0可以省略,a[0:2]相当于a[:2]
[1, 2]
三、修改列表元素
- 修改列表元素很简单,看代码
a = [1,2,3,4,5]
a[0] = 'test'
print(a) #结果:['test', 2, 3, 4, 5]
四、列表中添加元素
- 列表中添加元素有两种方法:
1、在列表末尾插入元素:append()
2、在列表中插入元素:insert()
a = []
a.append(1)
a.append(2)
print(a) #结果:[1,2]
a.insert(0,'测试') #在索引0处添加空间,并把'测试'存储到这个地方。这种操作将列表中的所有元素都右移一个位置
print(a) #结果:['测试', 1, 2]
五、列表中删除元素
- 列表中删除元素4种方法:pop、clear、remove、del
1、pop:L.pop([index]) -> item -- remove and return item at index (default last)
a = [1,2,3,4]
print(a.pop()) #不加索引号,删除最后一个元素
print(a)
print(a.pop(1)) #加索引号,删除索引号所在的位置
print(a)
结果:
4
[1, 2, 3]
2
[1, 3]
2、clear:L.clear() -> None -- remove all items from L
a = [1,2,3,4]
a.clear() #清空列表中所有元素
print(a)
结果:
[]
3、remove:L.remove(value) -> None -- remove first occurrence of value
a = ['a','b',1,2]
a.remove('a') #根据值删除元素
a.remove(1)
print(a)
结果:
['b', 2]
4、del
a = ['a','b',1,2]
del a[0] #删除a[0]的值
print(a)
del a #删除引用
结果:
['b', 1, 2]
结论:关于pop和del的一些心得,当你对删除的值还需要引用时,那么就用pop,如果不需要引用,那么可以用del。上面这个例子,del a后,如果此时你再打印a列表就会报错
六、列表排序
两种方法:sort和sorted
>>>a = [2,1,3,5]
>>>a.sort() #列表中的排序方法
>>>a
[1, 2, 3, 5]
>>>a.sort(reverse=True) #从高到低排序
>>>a
[5, 3, 2, 1]
>>>a = [2,1,3,5]
>>>sorted(a) #内置函数方法,排序完返回一个新列表
[1, 2, 3, 5]
七、列表复制
浅拷贝(2种方法):
list = a[:]
list = a.copy()
深拷贝:
首先定义个copy模块,import copy
list = copy.deepcopy(a)
八、列表生成式
要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
可以用list(range(1, 11))
:
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]
怎么做?方法一是循环:
>>> L = []
>>> for x in range(1, 11):
... L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
写列表生成式时,把要生成的元素x * x
放到前面,后面跟for
循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
>>>[x * x for x in range(2, 11,2)] #也可以这么实现
[4, 16, 36, 64, 100]
九、列表中其它函数的用法
1、count:计算字符出现的次数。L.count(value) -> integer -- return number of occurrences of value
2、extend:列表后面添加元素,添加元素必须为可迭代对象。L.extend(iterable) -> None -- extend list by appending elements from the iterable
3、index:返回元素在列表中第一次出现的位置,返回索引号。L.index(value, [start, [stop]]) -> integer -- return first index of value.
4、reverse:列表翻转,L.reverse() -- reverse *IN PLACE*
>>a = [1,2,3,1,2,4]
>>a.count(1)
2
>>a.extend(['a','b'])
>>a
[1, 2, 3, 1, 2, 4, 'a', 'b']
>>a.index('a')
6
>>a.reverse()
>>a
['b', 'a', 4, 2, 1, 3, 2, 1]