这几天忙着做Python项目开发,耽搁了一些时间,今天来完整地写一下Python列表部分的笔记。
Python列表
1.列表的创建
创建列表有[]和list()两种方法。[]方法用于直接创建列表,list()方法用于将其他可直接转化为列表的可迭代对象转化为列表。
关于列表的几点注意事项:
- 列表中的元素可以为数字、字符串、列表、元组、字典、集合、对象等等。
- 列表中的元素及其数据类型都可以被改变(列表中整个元组可以被改变,但不能直接修改元组中的元素)。
- 列表中所有元素的数据类型及其大小可同可不同。
创建空列表
list1 = [] # []
list2 = list() # []
创建一维列表
list1 = [1,2,3,4,5]
list2 = ["A","B","C","D","E"]
map_object = map(str,list1)
list3 = list(map_object)
print(map_object,type(map_object)) # <map object at 0x000001C017D65FA0> <class 'map'>
print(list3) # ['1', '2', '3', '4', '5']
dict_data = {"A":1,"B":2,"C":3,"D":4}
keys = dict_data.keys()
key_list = list(keys)
print(keys,type(keys)) # dict_keys(['A', 'B', 'C', 'D']) <class 'dict_keys'>
print(key_list) # ['A', 'B', 'C', 'D']
创建二维列表
list1 = [[1,2,3],[4,5,6],["A","B"]]
print(list1)
# [[1, 2, 3], [4, 5, 6], ['A', 'B']]
创建复杂列表
list1 = [["A","B",1],True,3.14,{"a":1,"b":2,"c":3},(2.5,3.5)]
print(list1) # [['A', 'B', 1], True, 3.14, {'a': 1, 'b': 2, 'c': 3}, (2.5, 3.5)]
2.列表的索引和切片
一维列表的索引和切片
索引或切片 | 说明 |
---|---|
a[i] | 取列表第i个字符(i>=0为正序,i<=-1为逆序) |
a[i:k] | 取列表第i~第k-1位置的元素。当k>len(a)时,取第i个位置及其后面的所有元素。 |
a[i:-1] | 取列表第i~倒数第2个元素。 |
a[i::] | 取列表第i个位置及其后面的所有元素。 |
a[i:len(a)] | 取列表第i个位置及其后面的所有元素。 |
a[::-1] | 列表逆序。 |
data = ["A","B","C","D","E"]
print(data[2]) # C
print(data[-1]) # E
print(data[0:3]) # ['A', 'B', 'C']
print(data[1:-1]) # ['B', 'C', 'D']
print(data[1::]) # ['B', 'C', 'D', 'E']
print(data[1:len(data)]) # ['B', 'C', 'D', 'E']
print(data[1:10]) # ['B', 'C', 'D', 'E']
print(data[::-1]) # ['E', 'D', 'C', 'B', 'A']
二维及多维列表的索引
list[i] [j] …[n] ==>先通过[i]定位到第i个元素,再通过[j]访问第i个元素(子列表)中的第j个元素,依次类推下去。
list1 = [[1,2,3,4,5],["A","B","C","D"],[10,11,12,13]]
print(list1[1]) # ['A', 'B', 'C', 'D']
print(list1[1][2]) # C
3.列表的循环遍历
data = ["A","B","C","D","E"]
## 按索引遍历
for idx in range(len(data)):
print(data[idx],end=" ")
else:
print()
# A B C D E
## 按值遍历
for value in data:
print(value,end=" ")
else:
print()
# A B C D E
## 同时按索引和值遍历
for idx,value in enumerate(data):
print(idx,value)
"""
0 A
1 B
2 C
3 D
4 E
"""
4.列表的常用操作
4.1 查找
方法 | 说明 |
---|---|
list[i] | 访问列表的某个位置的值。 |
index(value,start=0) | 查找value是否在列表中,是则返回第1个索引;否则,报错。start=0表示从第0个位置开始查找。 |
count(value) | 统计列表中value出现的次数。value在列表中则返回其出现的次数,不在则返回0。 |
len(list) | 计算列表的长度。 |
in | 判断一个元素是否在列表中。在则返回True;否则,返回False。 |
not in | 判断一个元素是否不在列表中。不在则返回True;否则,返回False。 |
data = [1,2,3,4,5,6,7,2,3,4,2,5]
print(data[2]) # 3
print(len(data)) # 12
find_value = 3
try:
idx = data.index(find_value)
print("{}对应的第一个索引为{}".format(find_value,idx))
# 3对应的第一个索引为2
except:
print("{}不在data中".format(find_value))
print(data.count(2)) # 3
print(6 in data) # True
print(6 not in data) # False
4.2 增加
方法 | 说明 |
---|---|
append(object) | 将整个对象添加到列表尾部。object可为单个值或可迭代对象。 |
extend(iterable) | 将可迭代对象中的元素一个个添加到列表尾部。iterable不能为单个值。 |
insert(index,object) | 在第index个索引前插入对象object。 |
list1 = ["A","B","C","D"]
list1.append("E")
print(list1) # ['A', 'B', 'C', 'D', 'E']
list1.append([1,2,3])
print(list1) # ['A', 'B', 'C', 'D', 'E', [1, 2, 3]]
list2 = ['A', 'B', 'C', 'D', 'E']
list2.extend([1,2,3])
print(list2) # ['A', 'B', 'C', 'D', 'E', 1, 2, 3]
list3 = ["A","B","C","D"]
list3.insert(2,10)
print(list3) # ['A', 'B', 10, 'C', 'D']
list3.insert(-1,[1,2,3])
print(list3) # ['A', 'B', 10, 'C', [1, 2, 3], 'D']
4.3 修改
方法 | 说明 |
---|---|
list[i] = value | 修改列表第i个位置的值 |
reverse() | 列表逆序。[::-1]逆序,返回列表副本。 |
sort(key=None,reverse=False) | 列表排序,reverse=False默认升序。 |
sorted(key=None,reverse=False) | Python内置排序函数,reverse=False默认升序。返回排序副本。 |
list1 = [1,2,3,4,5]
list1[2] = "A"
print(list1) # [1, 2, 'A', 4, 5]
list1.reverse()
print(list1) # [5, 4, 'A', 2, 1]
new_list = list1[::-1]
print(new_list) # [1, 2, 'A', 4, 5]
list2 = [2,4,1,7,2,5]
list2.sort()
print(list2) # [1, 2, 2, 4, 5, 7]
list3 = [2,4,1,7,2,5]
new_list = sorted(list3)
print(new_list) # [1, 2, 2, 4, 5, 7]
有关排序函数参数key=None的用法可查看sorted()的详细用法。关于sorted()的详细用法可查看我的这一篇博文尾页。02_Python常用内置函数。
4.4 删除
方法 | 说明 |
---|---|
del | Python内置函数,删除整个列表对象。 |
pop(index=-1) | 删除列表第index个元素,index=-1默认删除尾部元素。 |
remove(value) | 删除列表中的value值,如果value不在列表中则报错。 |
clear() | 清除列表,清除后列表变为空列表。 |
list1 = [1,2,3]
del list1
# print(list1)
# NameError: name 'list1' is not defined
list2 = [1,2,3,4,5]
list2.pop()
print(list2) # [1, 2, 3, 4]
list2.pop(1)
print(list2) # [1, 3, 4]
list3 = [1,2,3,4,5,1,2,3,4,5]
list3.remove(2)
print(list3) # [1, 3, 4, 5, 1, 2, 3, 4, 5]
#list3.remove(10)
# ValueError: list.remove(x): x not in list
list3.clear()
print(list3) # []
4.5 拷贝
拷贝方式 | 说明 |
---|---|
= | 浅拷贝,不产生新的内存空间,只是给对象的引用起别名。 |
copy() | 深拷贝,产生新对象和新的内存空间。 |
data1 = [1,2,3,4,5]
data2 = data1
print(data1,data2) # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
print(id(data1)) # 1924539022272
print(id(data2)) # 1924539022272
data3 = data1.copy()
print(data1,data3) # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
print(id(data1)) # 1924539022272
print(id(data3)) # 1924544571968 ==> 产生新对象
5.列表与字符串、元组、字典、集合、对象的相互转化
本部分在项目开发中非常有用,能熟练使用的话会使我们写的代码变得非常精简。
列表<==>字符串
# 列表转换为字符串
list_to_str1 = "".join(["1","2","3","4","5"])
list_to_str2 = "".join(map(str,[1,2,3,4,5]))
print(list_to_str1,type(list_to_str1)) # 12345 <class 'str'>
print(list_to_str2,type(list_to_str2)) # 12345 <class 'str'>
# 字符串转换为列表
string = "ABCDEF"
str_to_list = [s for s in string]
print(str_to_list) # ['A', 'B', 'C', 'D', 'E', 'F']
列表<==>元组
# 列表转换为元组
list1 = [1,2,3,4,5]
list_to_tuple = tuple(list1)
print(list_to_tuple) # (1, 2, 3, 4, 5)
# 元组转化为列表
tuple1 = (1, 2, 3, 4, 5)
tuple_to_list = list(tuple1)
print(tuple_to_list) # [1, 2, 3, 4, 5]
列表<==>字典
# 列表转化为字典
key_list = ["A","B","C","D","E"]
value_list = [1,2,3,4,5]
dict_data = dict(zip(key_list,value_list))
print(dict_data)
# {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
# 字典转化为列表
dict_data = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
key_list = list(dict_data.keys())
value_list = list(dict_data.values())
print(key_list) # ['A', 'B', 'C', 'D', 'E']
print(value_list) # [1, 2, 3, 4, 5]
列表<==>集合
# 列表转换为集合
list1 = [1,2,6,2,2,3,5,3,7]
list_to_set = set(list1) # 去掉重复元素
print(list_to_set) # {1, 2, 3, 5, 6, 7}
# 集合转换为列表
new_list = list(list_to_set)
print(new_list) # [1, 2, 3, 5, 6, 7]
列表<==>对象
# list与map对象转换
list1 = [1,2,3,4,5]
map_object = map(str,list1)
new_list = list(map_object)
print(map_object) # <map object at 0x000001C017C6A2B0>
print(new_list) # ['1', '2', '3', '4', '5']
# list与filter对象
greater = lambda num: num > 10
list2 = [1,5,12,3,17,24,9]
filter_object = filter(greater,list2) # 筛选列表中大于10的数
new_list = list(filter_object)
print(filter_object) # <filter object at 0x000001C017DD1BB0>
print(new_list) # [12, 17, 24]