Python简明教程--List

1. List的定义和基本操作

在Python中,List是一种非常常用的数据类型,它是一串按照特定顺序排列的值的集合,可以存储任意数据类型的元素,包括数字、字符串、甚至其他List和Tuple。

定义一个List,可以使用方括号括起来,多个元素之间用逗号进行分隔:

my_list = [1, 2, "hello", 3.14]

可以通过下标访问List中的元素,注意下标从0开始:

my_list = [1, 2, "hello", 3.14]

# 访问第一个元素

print(my_list[0]) # 结果为 1

# 访问第三个元素

print(my_list[2]) # 结果为 "hello"

当访问越界的下标时,会抛出IndexError异常,需要注意:

my_list = [1, 2, "hello", 3.14]

# 访问越界的下标

print(my_list[4]) # 抛出IndexError异常

1.1 List的基本操作

List支持一些基本的操作,比如元素的添加、删除、修改和查找。

1.1.1 添加元素

可以使用append方法向List中添加一个元素,该元素将被添加到List的末尾:

my_list = [1, 2, "hello", 3.14]

# 添加一个元素

my_list.append("world")

print(my_list) # 结果为 [1, 2, "hello", 3.14, "world"]

如果要添加多个元素,可以使用extend方法将另一个List里的元素添加到当前List的末尾:

my_list = [1, 2, "hello", 3.14]

# 添加多个元素

my_list.extend([4, 5, "Python"])

print(my_list) # 结果为 [1, 2, "hello", 3.14, 4, 5, "Python"]

1.1.2 删除元素

可以使用del关键字或者remove方法删除List中的元素。

通过下标删除元素:

my_list = [1, 2, "hello", 3.14]

# 删除第一个元素

del my_list[0]

print(my_list) # 结果为 [2, "hello", 3.14]

通过元素的值删除元素:

my_list = [1, 2, "hello", 3.14]

# 删除元素"hello"

my_list.remove("hello")

print(my_list) # 结果为 [1, 2, 3.14]

1.1.3 修改元素

可以直接通过下标修改List中的元素:

my_list = [1, 2, "hello", 3.14]

# 修改第三个元素

my_list[2] = "world"

print(my_list) # 结果为 [1, 2, "world", 3.14]

1.1.4 查找元素

可以使用in关键字判断一个元素是否在List中:

my_list = [1, 2, "hello", 3.14]

# 判断元素是否在List中

print("hello" in my_list) # 结果为 True

print(3 not in my_list) # 结果为 False

如果要获取一个元素在List中的下标,可以使用index方法:

my_list = [1, 2, "hello", 3.14]

# 获取元素在List中的下标

print(my_list.index("hello")) # 结果为 2

2. List的切片操作

切片是指从一个List中取出连续的一个子序列。可以使用冒号运算符来实现切片操作,它的形式为List[start:end]。

其中start表示开始下标(包含),end表示结束下标(不包含)。如果不指定start或end,则默认为List的第一个元素和最后一个元素。

2.1 末尾切片

最简单的切片操作是省略start或end,这样就可以从List的最开始或最末尾开始切片:

my_list = [1, 2, "hello", 3.14]

# 从第一个元素开始取

print(my_list[:2]) # 结果为 [1, 2]

# 从第三个元素开始取到最后一个元素

print(my_list[2:]) # 结果为 ["hello", 3.14]

# 取出所有元素

print(my_list[:]) # 结果为 [1, 2, "hello", 3.14]

2.2 指定步长

可以使用第三个参数来指定步长,默认为1:

my_list = [1, 2, 3, 4, 5, 6]

# 按照步长为2取值

print(my_list[::2]) # 结果为 [1, 3, 5]

# 按照步长为3取值

print(my_list[::3]) # 结果为 [1, 4]

2.3 倒序切片

可以通过指定负数下标来实现倒序切片:

my_list = [1, 2, 3, 4, 5]

# 倒序切片

print(my_list[::-1]) # 结果为 [5, 4, 3, 2, 1]

3. List的排序

可以使用sort方法对List进行排序,该方法会直接修改原有的List元素。

sort方法支持两个可选参数:key和reverse。

其中key是一个函数,表示排序的依据,可以根据元素的某些属性进行排序。reverse表示是否降序,默认为False。

3.1 默认排序

默认情况下,sort方法会按照元素的大小进行排序。如果元素的数据类型不同,则会抛出TypeError异常。

my_list = [5, 2, 3, 1, 4]

# 默认排序

my_list.sort()

print(my_list) # 结果为 [1, 2, 3, 4, 5]

3.2 按照元素某个属性排序

可以使用key参数指定一个函数来进行排序,该函数的返回值将作为排序的依据。

例如,可以按照元素的长度进行排序:

my_list = ["hello", "Python", "world", "Java"]

# 按照元素的长度进行排序

my_list.sort(key=len)

print(my_list) # 结果为 ["Java", "hello", "world", "Python"]

3.3 按照元素的值进行排序(降序)

可以使用reverse参数将List按照降序排列:

my_list = [5, 2, 3, 1, 4]

# 按照降序进行排序

my_list.sort(reverse=True)

print(my_list) # 结果为 [5, 4, 3, 2, 1]

4. List的复制和拷贝

在Python中,List是一种可变的对象,因此需要注意其复制和拷贝的问题。

4.1 直接赋值的问题

当将一个List赋值给另一个List时,它们会引用同一块内存地址,即它们实际上是同一个对象的不同名称而已。

list1 = [1, 2, 3]

list2 = list1

list2[1] = 10

print(list1) # 结果为 [1, 10, 3]

4.2 浅拷贝

可以使用copy方法进行浅拷贝,它会创建一个新的List,但新的List中元素的引用和原始的List中元素的引用相同。

import copy

list1 = [1, 2, ["hello", "world"]]

list2 = list1.copy()

# 改变list2中元素的值

list2[2][1] = "Python"

print(list1) # 结果为 [1, 2, ['hello', 'Python']]

print(list2) # 结果为 [1, 2, ['hello', 'Python']]

4.3 深拷贝

对于嵌套的数据结构,可以使用copy模块的deepcopy函数进行深拷贝,它会创建一个新的List,并递归地将原始List中的所有对象都复制到新的List中。

import copy

list1 = [1, 2, ["hello", "world"]]

list2 = copy.deepcopy(list1)

# 改变list2中元素的值

list2[2][1] = "Python"

print(list1) # 结果为 [1, 2, ['hello', 'world']]

print(list2) # 结果为 [1, 2, ['hello', 'Python']]

5. List的遍历

可以使用for循环遍历List中的元素。

my_list = [1, 2, "hello", 3.14]

# 遍历List中的所有元素

for item in my_list:

print(item)

5.1 使用enumerate函数获取下标

如果需要获取每个元素在List中的下标,可以使用enumerate函数。

my_list = [1, 2, "hello", 3.14]

# 遍历List中的所有元素及其下标

for index, item in enumerate(my_list):

print("下标:%d,元素:%s" % (index, item))

6. List的操作复杂度

Python的List基于动态数组实现,因此List的翻转、拼接、取值、赋值、增删元素的时间复杂度都是O(n)。

然而,在List的末尾添加或删除元素的时间复杂度为O(1)。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签