Python数据类型之列表
1、介绍
列表由一系列按特定顺序排列的元素组成。列表通常包含多个元素,也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。
列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
2、列表基本操作
1. 创建列表
# 使用list方法,创建一个空列表
list01 = list()
# 使用方括号,声明一个空列表
list02 = []
# 使用列表推倒式生成列表
list_ = [i for i in iterble]
注意,这两种方法都可以创建列表,但是都是空列表。
# 创建一个列表
list03 = [1, 2, 3, 4, 5]
2. 列表索引和切片
python当中,对可迭代数据进行索引和切片时,起始位置都是从0开始。
# 索引列表当中的第三个数据,由于索引位置是从0开始,所以要索引第三个数据是写2
list04 = list03[2] # 3
# 切片, 获取1到3(不包含3)的数据
list05 = list03[1: 3] # [2, 3]
# 切片, 获取1到3(包含3)的数据
list06 = list03[1: 4] # [2, 3, 4]
# 切片, 获取从2到结束的数据
list07 = list03[2:] # [3, 4, 5]
list08 = list03[2: -1] # [3, 4, 5] 与上面的结果相同
从上面可以看出,切片获取数据是顾头不顾尾的,所以要想获取包含结尾的数据时,需要在最后的索引位置上+1
3. 列表更新
# 修改索引为2的数据元素改为"python"
list03[2] = "python"
print(list03) # [1, 2, 'python', 4, 5]
# 切片赋值
list03[1: 3] = [6]
print(list03) # [1, 6, 4, 5]
4. 删除元素
删除元素,使用del语句
del list03[2]
print(list03) # [1, 2, 4, 5]
3、列表操作方法
list09 = ["Jack", "Tom", "Lucy", "Peter", "Lily"]
1>. append() 方法
在列表的末尾添加元素
list09.append("Jerry") # ["Jack", "Tom", "Lucy", "Peter", "Lily", "Jerry"]
2>. insert() 方法
在列表的指定位置插入元素
list09.insert(2, "Alix") # ["Jack", "Tom", "Alix", Lucy", "Peter", "Lily"]
3>. extend() 方法
extend让你能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提供给方法extend。换而言之,你可使用一个列表来扩展另一个列表。
list10 = ["Abel", "David", "Evan"]
list09.extend(list10) # ["Jack", "Tom", "Lucy", "Peter", "Lily", "Abel", "David", "Evan"]
4>. remove() 方法
删除指定的元素
list09.remove("Tom")
print(list09) # ["Jack", "Lucy", "Peter", "Lily"]
5>. pop() 方法
pop从列表中删除一个元素(末尾为最后一个元素),并返回这一元素。
print(list09.pop()) # Lily
print(list09) # ['Jack', 'Tom', 'Lucy', 'Peter']
print(list09.pop(0)) # Jack 删除指定索引位置的元素
print(list09) # ['Tom', 'Lucy', 'Peter']
6>. clear() 方法
清空列表中所有的元素
list09.clear()
print(list09) # []
7>. index() 方法
从列表中获取指定值的索引位置
print(list09.index("Lucy")) # 2
8>. count() 方法
count计算指定的元素在列表中出现了多少次
list11 = ["Jack", "Tom", "Lucy", "Tom", "Peter", "Lily", "Tom"]
print(list11.count("Tom")) # 3
9>. copy() 方法
list12 = ["Jack", "Tom", "Lucy", "Peter", "Lily"]
list13 = list12.copy()
print("list12的内存ID: ", id(list09), "list13的内存ID: ", id(list10)) # list12的内存ID: 2077482563968 list13的内存ID: 2077482563008
从查看ID可以发现,经过copy的数据,在内存当中的地址已经发生了变化。
list12.append("Abel")
print(list12) # ["Jack", "Tom", "Lucy", "Peter", "Lily", "Abel"]
print(list13) # ["Jack", "Tom", "Lucy", "Peter", "Lily"]
从上面的修改可以看出,修改原列表,被复制的列表不会发生变化
4、列表的排序操作
1>. sort() 方法
sort(*, key=None, reverse=None)
sort()只能通过关键字(仅限关键字参数)传递的两个参数如下:
- key : 指定一个函数,该函数用于从每个列表元素提取用于进行比较操作的键,如key = str.lower。列表中每一个条目对应的键都会被计算一次,然后用于整个排序过程。默认值None表示列表条目将会被直接排序,而不会计算出一个单独的用于比较的键值。
- reverse : 是一个布尔值,如果其值为True,则列表中的元素将会按照比较方法的反序进行排序。
list13 = [3, 1, 4, 8, 9, 6, 7, 5, 2]
list13.sort()
print(list13) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
list13.sort(key=lambda x: x)
print(list13) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
list13.sort(reverse=True)
print(list13) # [9, 8, 7, 6, 5, 4, 3, 2, 1]
list14 = ["E", "b", "D", "t", "A", "o", "w"]
list14.sort()
print(list14) # ['A', 'D', 'E', 'b', 'o', 't', 'w'] 默认排序
list14.sort(key=str.upper)
print(list14) # ['A', 'b', 'D', 'E', 'o', 't', 'w']
list14.sort(key=str.upper, reverse=True)
print(list14) # ['w', 't', 'o', 'E', 'D', 'b', 'A']
说明:
sort()方法会直接修改list,这在对大列表进行排序时可以节约空间;该方法的副作用是不会返回排序后的list。
sort()方法保证稳定性。如果能保证两个比较相当的元素不会改变相对位置,那么这个排序就是稳定的,这有助于通过多个条件进行排序,比如 先按部门排序,然后再按工资级别排序。
5、列表的其它操作
列表除了以上方法以外,还可以对列表进行以下操作
1>. 判断元素是否在列表中
list15 = ["Jack", "Tom", "Abel", "Evan", "Lucy"]
print("Lily" in list15) # False
print("Lily" not in list15) # True
print("Jack" in list15) # True
2>. 列表拼接
list16 = ["Jack", "Tom", "Abel", "Evan"]
list17 = ["Lucy", "Lily", "Angel"]
list18 = list16 + list17
print(list18) # ["Jack", "Tom", "Abel", "Evan", "Lucy", "Lily", "Angel"]
list19 = list16 * 2
print(list19) # ["Jack", "Tom", "Abel", "Evan", "Jack", "Tom", "Abel", "Evan"]
3>. 其它操作
list20 = [3, 4, 5, 6, 8, 9, 1, 2, 7]
print(len(list20)) # 9
print(max(list20)) # 9
print(min(list20)) # 1