定义
- 列表(list):一组有顺序的数据的集合(用中括号包裹)。
- 元组tuple是一种特殊的列表,不能修改,具有list除了修改的所有操作(用圆括号括着)。这里的不可修改是指那一份数据不可修改,两个tuple连接给一个新的tuple这类本质是创建的操作是允许的。但是内容修改会违法。
创建及分片
分片操作会产生一个新的list,而不是共同管理变量的关系。(相当于深度拷贝)
示例代码。
# 空列表
l1 = []
# 有初值的列表(可放入若干个各种类型的数据)
l2 = [1, 2, 3, "lk"]
# 类似构造的创建方法
l3 = list()
# 列表的访问,按照下标索引(编程语言编号几乎都是从零开始) 下标索引不能越界
print(l2[0])
# 列表的分片操作 l[开始位置:结束位置(达不到):步长(默认为1)] 分片操作的位置可以越界,但超出的不会考虑
l = [1, 2, 3, 4, 5, 6]
# 位置值可以一个或者两个为空,系统给默认值开始位置和结束位置+1
print(l[:])
print(l[0:4:2])
print(l[-2:-4])
print(l[-2:-4:-1])#改变方向从右往左
输出如下。
1
[1, 2, 3, 4, 5, 6]
[1, 3]
[]
[5, 4]
示例代码。
l = [1, 2, 3, 4, 5]
l1 = l
l2 = l[:]
print(id(l))
print(id(l1))
print(id(l2))
输出如下。
2435785292352
2435785292352
2435785291392
删除
示例代码。
list1 = [1, 2, 3, 4, 5]
print(list1)
print(id(list1))
del(list1[0])
# 或者使用list1.pop(0)
print(list1)
print(id(list1))
输出如下。
[1, 2, 3, 4, 5]
2682781039232
[2, 3, 4, 5]
2682781039232
列表的加、乘以及成员资格运算
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8]
list3 = list1 + list2
print(list3)
list4 = list1 * 3
print(list4)
print(1 in list1)
print(10 in list1)
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
True
False
遍历(python独有的遍历方法)
list1 = [1, 2, 3, 4, 5]
list2 = [["a", 1], ["b", 2]]
for item in list1:
print(item, end=" ")
print()
# 字典的遍历方法,局限性高
for k, v in list2:
print(k, ",", v)
1 2 3 4 5
a , 1
b , 2
列表内容的生成方式/列表生成式(也可以for嵌套)
list1 = [1, 2, 3, 4, 5]
list2 = [item for item in list1]
print(list2)
list3 = [item*10 for item in list1]
print(list3)
list4 = [item for item in list1 if item % 2 == 0]
print(list4)
str1 = "13579"
list5 = [int(item) for item in str1]
print(list5)
[1, 2, 3, 4, 5]
[10, 20, 30, 40, 50]
[2, 4]
[1, 3, 5, 7, 9]
列表常用的内置函数(可自行查看说明文档)
list1 = [1, 2, 3, 4, 5]
# 列表长度也就是元素个数
print(len(list1))
# 求最大值
print(max(list1))
# 求最小值
print(min(list1))
# 求和
print(sum(list1))
# 转换为list
str1 = "i study python"
print(list(str1))
print(list(str1.split(" ")))
# 查找列表指定值的个数
print(list1.count(1))
5
5
1
15
['i', ' ', 's', 't', 'u', 'd', 'y', ' ', 'p', 'y', 't', 'h', 'o', 'n']
['i', 'study', 'python']
1
列表内容添加
- append末尾追加
- insert指定位置之前添加
list1 = [1, 2, 3, 4, 5]
list1.append(6)
print(list1)
list1 = [1, 2, 3, 4, 5]
list1.insert(0, 0)
print(list1)
[1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5]
列表内容删除
- del删除见前
- pop弹出最后一个元素,并返回
- remove删除列表中某个值
- clear清空列表所以元素,但内存仍在(java List类似)
list1 = [1, 2, 3, 4, 5]
print(list1.pop())
print(list1)
list1 = [1, 2, 3, 4, 5,"m"]
list1.remove("m")
print(list1)
list1 = [1, 2, 3, 4, 5]
list1.clear()
5
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
数据变换
- reverse所有数据倒序重存
- extend后面加上一个列表
list1 = [1, 2, 3, 4, 5]
list1.reverse()
list1 = [1, 2, 3, 4, 5]
list2 = [4,3,2,1]
list1.extend(list2)
列表的拷贝和浅拷贝
- 赋值(传址)和浅拷贝(传值)区别
# python中赋值表示共同管理一份数据
list1 = [1, 2, 3, 4, 5]
list2 = list1
list2.pop()
print(list2)
print(list1)
# 拷贝则是把值拿过来重新分配内存
list1 = [1, 2, 3, 4, 5]
list2 = list1.copy()
list2.pop()
print(list2)
print(list1)
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
深拷贝和浅拷贝区别(浅拷贝只拷贝一层内容)
#浅拷贝表现
list1 = [1, 2, 3, 4, 5, [20, 30]]
list2 = list1.copy()
print(id(list1))
print(id(list2))
print(id(list1[5]))
print(id(list2[5]))
list1[5][0] = 40
print(list1)
print(list2)
2113088386688
2113088387904
2113088387648
2113088387648
[1, 2, 3, 4, 5, [40, 30]]
[1, 2, 3, 4, 5, [40, 30]]