1 list()函数
list() 生成一个空的列表,等同于[]
list(iterable) 用可迭代对象初始化一个列表
>>> a = list()
>>> a
[]
>>> b = list('python')
>>> b
['p', 'y', 't', 'h', 'o', 'n']
>>> c = list('1234')
>>> c
['1', '2', '3', '4']
>>> d = list(5678)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
注:因为5678
不是可迭代对象,随意不能初始化列表。
2 列表运算
2.1 +运算
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> c=a+b
>>> c
[1, 2, 3, 4, 5, 6]
2.2 +=运算
>>> a=[1,2,3]
>>> a+=[7,8,9]
>>> a
[1, 2, 3, 7, 8, 9]
2.3 *运算
>>> a = [1,2,3]
>>> a*2
[1, 2, 3, 1, 2, 3]
2.4 *=运算
2.5 关系运算
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = ['1','2','3']
>>> d = [1,2,3]
>>> a == b
False
>>> a != b
True
>>> a == c
False
>>> a == d
True
2.6 in运算
>>> 1 in [1,2,3]
True
>>> "1" in [1,2,3]
False
>>> "a" in ["a","b","c"]
True
>>> a in [a,b,c]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
2.7 and 运算符
>>> [] and ["a","b"]
[]
>>> ["a","b"] and []
[]
>>> ["a","b"] and ["c","d"]
['c', 'd']
2.8 or 运算符
>>> [] or [1,2]
[1, 2]
>>> [1,2] or []
[1, 2]
>>> [] or []
[]
>>> [1,2] or [3,4]
[1, 2]
2.9 not 运算符
>>> not[]
True
>>> not[1,2]
False
3 索引与切片
3.1 列表索引
与字符串索引index一样,可以是负数
3.2 列表切片slice
语法与字符串切片一样 [起始索引 : 结束索引 : 步长]
列表切片赋值
b = a[:] #相当于将a列表赋值给b
切片赋值可以一次性修改列表的多个元素
>>> a = [1,2,3,4,5]
>>> a[1:4] = [6,7,8,9]
>>> a
[1, 6, 7, 8, 9, 5]
切片赋值也可以增加或减少列表元素
>>> a = [1,2,3,4,5]
>>> a[1:4] = [7,8]
>>> a
[1, 7, 8, 5]
>>> a = [1,2,3,4]
>>> a[2:] = [9,8,7,6,5] #将索引2之后的元素全部替换
>>> a
[1, 2, 9, 8, 7, 6, 5]
>>> a = [1,2,3,4]
>>> a[1:3] = [] #将索引1、2处删除
>>> a
[1, 4]
注意:按照这种方法进行 步长不为1的列表进行赋值、删除时 报错
>>> a[1:6:2] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 1 to extended slice of size 3
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1:6:2] = []
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 0 to extended slice of size 3
在索引位置i
处插入一段代码a[i:i]
>>> a = [1,2,3,4]
>>> a[0:0] = [7,8,9] #在索引0位插入列表
>>> a
[7, 8, 9, 1, 2, 3, 4]
>>> a = [1,2,3,4]
>>> a[1:1] = [9,8,7] #在索引1位插入列表
>>> a
[1, 9, 8, 7, 2, 3, 4]
4 列表长度计算函数len()
可以用来得到列表的长度
>>> a = [1,2,3,4]
>>> len(a)
4
>>> m = ['a','b','c','d']
>>> len(m)
4
5 列表最大值函数max()
用来得到列表中最大值的元素
>>> a = [1,2,3,4]
>>> max(a)
4
>>> b = ['1','2','3','4']
>>> max(b)
'4'
>>> c = ['1',2,'3',4]
>>> max(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() > str()
6 列表最小值函数min()
可以得到列表中最小元素
7 列表元素求和函数sum()
可以得到列表中所有元素和
sum(列表[, 起始值])
列表值 总和 加 起始值;当起始值省略时则默认为0。
>>> a = [1,2,3,4]
>>> sum(a)
10
>>> sum(a,100)
110
>>> b = ['1','2','3','4','5']
>>> sum(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
8 获得列表索引值函数index()
得到列表中某个元素的索引
L.index(value [,begin[, end]])
value 要确定索引的元素(值)
返回值为第一个元素值的索引
>>> a = [1,2,3,4,5,5,5,]
>>> a.index(5)
4
begin 开始索引的索引值
end 结束索引的索引值
>>> a = [1,2,3,4,5,5,5,]
>>> a.index(5,5)
5
>>> a.index(5,1,4) #表示查询元素值为5的索引,从索引1开始(包含起始端点值),到索引4结束(不包含结束端点值)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 5 is not in list
>>> a.index(5,6,10) #结束索引可以越界
6
9 获得列表元素个数函数count()
获得列表中元素个数
L.count(object)
object 元素值
示例
>>> a = [1, 2, 3, 4, 5, 5, 5]
>>> a.count(5)
3
10 向列表中添加元素append()
向列表中添加元素
L.append(object)
object 要添加的元素,
将object添加到列表的末尾
返回None
>>> a = [1, 2, 3, 4, 5, 5, 5]
>>> a.append('a')
>>> a
[1, 2, 3, 4, 5, 5, 5, 'a']
>>> a.append('b','c')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
>>> a.append(['b','c']) #将[]列表当作一个元素添加到列表末尾
>>> a
[1, 2, 3, 4, 5, 5, 5, 'a', ['b', 'c']]
11 向列表中添加另一列表extend()
向列表追加另一个列表
L.extend(iterable)
iterable 要添加的可迭代对象(元素)
返回None
>>> a = [1,2,3,4,5]
>>> a.extend("abc")
>>> a
[1, 2, 3, 4, 5, 'a', 'b', 'c']
>>> a = [1,2,3,4,5]
>>> a.extend(["abc"])
>>> a
[1, 2, 3, 4, 5, 'abc']
>>> a = [1,2,3,4]
>>> a.extend(["a","b","c"])
>>> a
[1, 2, 3, 4, 'a', 'b', 'c']
>>> a = [1,2,3,4]
>>> a.extend(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> a.extend([5])
>>> a
[1, 2, 3, 4, 5]
12 向列表指定位置插入元素insert()
L.insert(index, object)
index 插入元素位置
object 插入的元素
返回None
插入元素位置可以越界,当越界时,则为列表的端点索引位置处插入值
>>> a = [1,2,3,4]
>>> a.insert(2,"ab")
>>> a
[1, 2, 'ab', 3, 4]
>>> a = [1,2,3,4]
>>> a.insert(2,["ab","cd"])
>>> a
[1, 2, ['ab', 'cd'], 3, 4]
>>> a = [1,2,3,4]
>>> a.insert(100,"ab")
>>> a
[1, 2, 3, 4, 'ab']
>>> a = [1,2,3,4]
>>> a.insert(-100,"ab")
>>> a
['ab', 1, 2, 3, 4]
13 列表的元素删除pop()
L.pop([index])
删除索引对应的元素,如果不加索引,默认删除最后一个元素
返回值:删除的元素
>>> a = [1,[2,3],4,[5,6],7,[8,9]]
>>> b = a.pop()
>>> b
[8, 9]
>>> a
[1, [2, 3], 4, [5, 6], 7]
>>> c = a.pop(-2)
>>> c
[5, 6]
>>> a
[1, [2, 3], 4, 7]
>>> d = a.pop(100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
14 删除列表中首次出现的元素remove()
从列表中删除第一次出现在列表的值
返回:None
>>> a = [1,2,3,1,2,3,'1','2','3','1','2','3']
>>> a.remove(1)
>>> a
[2, 3, 1, 2, 3, '1', '2', '3', '1', '2', '3']
>>> a.remove('1')
>>> a
[2, 3, 1, 2, 3, '2', '3', '1', '2', '3']
>>> a.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
15 删除列表元素 del语句
>>> a = [1,2,3,4,5,6]
>>> del a[-1]
>>> a
[1, 2, 3, 4, 5]
>>> del a[-2:-1]
>>> a
[1, 2, 3, 5]
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
16 浅复制copy()
L.copy()
仅复制一层,不会复制深层对象,
>>> m = [8,9]
>>> a = [1,2,m]
>>> b = a.copy()
>>> a[0] = 3
>>> m[0] = 3
>>> a
[3, 2, [3, 9]]
>>> b
[1, 2, [3, 9]]
>>> a is b
False
>>> c = a
>>> c is a
True
17 深复制deep copy()
深复制需要使用copy模块
>>> m = [[1,2],[3,4],5,6]
>>> m
[[1, 2], [3, 4], 5, 6]
>>> n = copy.deepcopy(m)
>>> n
[[1, 2], [3, 4], 5, 6]
>>> m[0][0] = 9
>>> m
[[9, 2], [3, 4], 5, 6]
>>> n
[[1, 2], [3, 4], 5, 6]
>>> n[0][1] = 8
>>> n
[[1, 8], [3, 4], 5, 6]
>>> m
[[9, 2], [3, 4], 5, 6]
18 列表顺序反转reverse()
L.reverse()
列表元素顺序反转。
返回值:None
>>> a = [1,2,3,4,5]
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]
19 列表元素排序sort()
将列表的顺序按值的大小进行排序
L.sort(reverse=False)
reverse=False 顺序自小到大,默认不写
reverse=True 顺序自大到小。
>>> a = ['ab','ac','d','e','a','b','c','ac','cb']
>>> a.sort()
>>> a
['a', 'ab', 'ac', 'ac', 'b', 'c', 'cb', 'd', 'e']
>>> a.sort(reverse=False)
>>> a
['a', 'ab', 'ac', 'ac', 'b', 'c', 'cb', 'd', 'e']
>>> a.sort(reverse=True)
>>> a
['e', 'd', 'cb', 'c', 'b', 'ac', 'ac', 'ab', 'a']
20 列表的清空clear()
L.clear
清空列表
>>> a = [1,2,3]
>>> id(a)
140714286592520
>>> a.clear()
>>> id(a)
140714286592520 #地址未发生改变
>>> a = [1,2,3]
>>> id(a)
140714286592776
>>> a = []
>>> id(a)
140714286592520 #地址发生改变
>>> a = [1,2,3]
>>> id(a)
140714286592776
>>> a[:] = []
>>> id(a)
140714286592776 #地址未发生改变
21 列表的遍历 while 和 for 循环
while循环
a = [1,2,3,4,5,6]
i = 0
sum_num = 0
while i<len(a):
sum += a[i]
i +=1
print(sum_num)
for循环
a = [1,2,3,4,5,6]
sum_num = 0
for n in a:
sum += n
print(sum_num)
22 列表推导式语法
列表推导时用可迭代的对象依此生成列表内元素的方式
[表达式 for 变量 in 可迭代对象 ]
或
[ 表达式 for 变量 in 可迭代对象 if 条件语句 ]
>>> y = [ x**2 for x in range(1,10)]
>>> y
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> z = [x**2 for x in range(1,10) if x%2 == 1]
>>> z
[1, 9, 25, 49, 81]
23 列表推导式嵌套
[ 表达式1 for 变量1 可迭代对象1 if条件语句1 for 变量2 in 可迭代对象2 if条件语句2]
>>> z = [x*y for x in [1,2,3] for y in [4,5,6]]
>>> z
[4, 5, 6, 8, 10, 12, 12, 15, 18]
24 字符串拆分与拼接
24.1 字符串拆分
split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
str.split(str="", num=string.count(str))
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。
拼接后输出是列表形式
>>> str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
>>> print(str.split())
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
>>> print(str.split(' ',1)
... )
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
24.2 字符串拼接
S.join(iterable)
返回字符串
对列表操作
>>> a = '/'
>>> b = a.join(["C:","Programe Files","Python3"])
>>> b
'C:/Programe Files/Python3'
对字符串操作
>>> a = "/"
>>> b = a.join("abcde")
>>> b
'a/b/c/d/e'
25 列表与字符串比较
列表和字符串都是序列,都是可迭代对象
字符串中每个元素只能存储字符,而列表可以存储任意类型对象
26 帮助
Python3 列表类提供了一些方法,帮助我们更好、更方便的使用列表
a = []
help(a)