列表在Python 中使用的频率最高,列表也是对象,并且它可以处理另外的对象。列表和数组非常类似,它实现了序列协议,允许从队列里面增加和移除对象。列表用一对方括号表示,第一个元素的索引是 0。列表有许多关联的方法。
创建列表
在一对方括号内,用逗号隔开的一个值序列,就是列表。
a_list = [1,2,3,4]
b_list = ['a','b','c','d']
c_list = ['一','二','三','四','五','六']
d_list = [1,2,'三','四']
处理列表的值
处理列表元素的语法和处理字符串字符的语法相同。索引的表示是用方括号括起来的表达式,索引开始值是0。
例子
a_list = [1,2,3,4]
num1 = a_list[0]
num2 = a_list[3]
print(num1)
print(num2)
输出
1
4
例子
d_list = [1,2,'三','四']
num = d_list[1]
str = d_list[2]
print(num)
print(str)
输出
2
三
列表的长度
函数 len 返回列表的长度,等于列表内元素的个数。
例子
numbers = ['一','二','三','四','五','六']
list_len = len(numbers)
print(list_len)
输出
6
清空列表
列表的 clear() 方法移除全部元素。
例子
numbers = ['一','二','三','四','五','六']
print(numbers)
numbers.clear()
print(numbers)
输出
[‘一’,’二’,’三’,’四’,’五’,’六’]
[]
插入或删除元素
函数 append() 在列表的末尾追加一个元素,列表的长度会增加一。
例子
numbers = ['一','二','三','四','五']
numbers.append('六')
print(numbers)
输出
[‘一’,’二’,’三’,’四’,’五’,’六’]
在列表里面追加一个列表
例子
num1 =[1,2,3]
num2 = [4,5,6]
num1.append(num2)
print(num1)
输出
[1, 2, 3, [4, 5, 6]]
列表操作符
使用 “+” 操作符连接列表
例子
num1 =[1,2,3]
num2 = [4,5,6]
num3 = num1 + num2
print(num3)
输出
[1, 2, 3, 4, 5, 6]
使用 * 操作符重复连接给定数量的列表
例子
num1 =['hi']
num = num1 * 4
print(num)
输出
[‘hi’, ‘hi’, ‘hi’, ‘hi’]
例子
num1 =[1,2,3,4]
num = num1 * 2
print(num)
输出
[1, 2, 3, 4, 1, 2, 3, 4]
插入元素到列表
例子
num1 =[1,2,4]
num1.insert(2,3) #在第三个位置插入一个元素
print(num1)
输出
[1, 2, 3, 4]
例子
num1 =[1,2,3,4,6]
num1.insert(-1,5) #在列表倒数第二个位置插入一个元素(负数表示从列表末尾倒数)
print(num1)
输出
[1, 2, 3, 4, 5, 6]
从列表删除元素
例子
numbers = ['一','二','三','四','五','六']
numbers.remove('三')
print(numbers)
输出
[‘一’,’二’,’四’,’五’,’六’]
列表的统计
列表的 count(x) 方法会返回元素 x在列表中出现的次数。
例子
str = ['h','e','l','l','o']
cnt = str.count('l')
print(cnt)
输出
2
元素的分割
列表元素可以进行分割。
例子
str = ['h','e','l','l','o']
lsc = str[1:4]
print(lsc)
输出
[‘e’, ‘l’, ‘l’]
str[1:4] – 表示从第二个元素开始,到第五个元素为止,但是不包括第五个元素。中间的冒号表示需要对列表的元素进行切片分割,获得子列表。
例子
str = ['h','e','l','l','o']
lsc = str[:3] # 分割出开始的三个元素
print(lsc)
输出
[‘h’, ‘e’, ‘l’]
例子
str = ['h','e','l','l','o']
lsc = str[3:] # 分割从第四个元素开始,第一个索引是 0
print(lsc)
输出
[‘l’, ‘o’]
列表的反转
reverse() 方法会反转一个列表的全部元素。
例子
str = ['h','e','l','l','o']
str.reverse()
print(str)
输出
[‘o’, ‘l’, ‘l’, ‘e’, ‘h’]
列表的查找
index() 方法可以返回第一个匹配的项的索引。
例子
str = ['h','e','l','l','o']
ind = str.index('l') # 'l' 的索引位置是2
print(ind)
输出
2
可以指定匹配查找的开始和结束的索引位置:
例子
str = ['h','e','l','l','o']
ind = str.index('l',3) # 从第三个位置开始查找
print(ind)
输出
3
在列表里面的存在性
用关键字 in 来检测元素在列表里面是否存在。
例子
str = ['h','e','l','l','o']
print('e' in str)
输出
True
列表里面不存在
例子
str = ['h','e','l','l','o']
print('e' not in str)
输出
False
使用动态的值创建新列表
例子
dList = [3 ** i for i in range(5)]
print(dList)
输出
[1, 3, 9, 27, 81]
列表排序
列表的 sort() 方法完成列表元素的内部排序。
例子
str = ['h','e','l','l','o']
str.sort()
print(str)
输出
[‘e’, ‘h’, ‘l’, ‘l’, ‘o’]
反转排序
例子
str = ['h','e','l','l','o']
str.sort(reverse=True)
print(str)
输出
[‘o’, ‘l’, ‘l’, ‘h’, ‘e’]
作为栈的列表
栈是一个对象的容器,按照后进先出(LIFO)的原则完成对象的插入和移除。 在栈中只能进行两种操作: 压入项到栈, 弹出项出栈。在列表栈的顶部增加一个项,用 append() ,并且从栈的顶部接收一个项,用无索引的 pop()。
例子
stack = [1,2,3,4,5]
print("压入前 ", stack)
stack.append(6)
stack.append(7)
print("压入后 ", stack)
stack.pop()
print("弹出后 ", stack)
stack.pop()
stack.pop()
print("弹出后 ", stack)
输出
压入前 [1, 2, 3, 4, 5]
压入后 [1, 2, 3, 4, 5, 6, 7]
弹出后 [1, 2, 3, 4, 5, 6]
弹出后 [1, 2, 3, 4]
列表作为队列
队列是一个对象的容器,按照先进先出(FIFO)的原则完成对象的插入和移除。队列只允许两种操作:进列和出列。进列 (append()) 意思是在队列的尾部插入一个项,出列 (pop(0))从前面移除一个项。
例子
queue = [1,2,3]
print("进列前 ", queue)
queue.append(4)
queue.append(5)
print("进列后 ", queue)
queue.pop(0)
print("出列后 ", queue)
queue.pop(0)
queue.pop(0)
print("出列后 ", queue)
输出
进列前 [1, 2, 3]
进列后 [1, 2, 3, 4, 5]
出列后 [2, 3, 4, 5]
出列后 [4, 5]
遍历一个列表
使用 for 循环遍历列表的每一个元素。
例子
str = ['h','e','l','l','o']
for s in str:
print(s)
输出
h
e
l
l
o
从第一个位置开始,获得其他的元素。
例子
str = [1,2,3,4,5,6,7,8,9,10]
print(str[::2])
输出
[1, 3, 5, 7, 9]
从第二个位置开始,获得其他元素。
例子
str = [1,2,3,4,5,6,7,8,9,10]
print(str[1::2])
输出
[2, 4, 6, 8, 10]
反转列表项
例子
str = [1,2,3,4,5,6,7,8,9,10]
print(str[::-1])
输出
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
zip() 函数
如果想同时循环遍历多个序列,可以使用 zip() 函数。
例子
numbers = [1,2,3,4,5]
alpla = ['a','b','c','d','e']
for num, alp in zip(numbers,alpla):
print(num, alp)
输出
1 a
2 b
3 c
4 d
5 e
从列表中删除重复的元素
获得唯一值集合的通用方案是利用字典,python 字典是一个唯一键值对的映射集合。所以将列表去除重复值的有效方法,就是利用字典完成转换。
例子
numList = [1,2,3,1,4,2,5,3]
numList = list(dict.fromkeys(numList))
print(numList)
输出
[1, 2, 3, 4, 5]
Python 列表的 extend() 方法
列表的 extend() 方法 可以通过传递一个列表参数完成添加这个列表的全部元素到这个列表,list.extend(其他列表) 。
例子
list1 = ['a', 'b', 'c']
list1.extend(['d', 'e'])
print(list1)
输出
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
append() 和 extend() 的比较
Python 的 append() 方法 添加一个元素到列表,extend() 方法是连接两个列表。append() 方法添加一个元素之后,它的长度增加一,extend() 方法 会遍历它的参数,并添加每一元素,它的长度会按照遍历到的元素个数增加。
Python append()方法的例子
list1 = ['a', 'b', 'c']
list1.append(['d', 'e'])
print(list1)
输出
[‘a’, ‘b’, ‘c’, [‘d’, ‘e’]]
Python extends() 方法的例子
list1 = ['a', 'b', 'c']
list1.extend(['d', 'e'])
print(list1)
输出
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
Python append() 和 extend()的操作符重载
在python里面,列表定义了 + 和 += 两个操作符 。它们类似于扩展(extend)的语法。第一个列表 + 第二个列表 会在内存里面创建第三个列表,并返回这个结果,要求是第二个列表是可以遍历的。第一个列表 += 第二个列表 会改变列表值,不会创建新的列表,它也类似于扩展(extend)。
时间复杂性
追加(append)有固定的时间复杂度,O(1)
扩展(extend)的时间复杂度是 O(k),其中 k 是需要添加的列表的长度
Python 的 append() 和extend()方法
extend() 方法的语法较为清晰,比追加的方式速度快。另外,如果仅仅是单纯增加一个元素,就使用 append() 方法。