您的位置:

Python List - 动态数组的使用和操作

Python List是常用的数据结构之一,它可以用来存储任意元素的集合,并且支持动态调整大小。在Python中,List的实现采用了动态数组的方式,因此也被称作Dynamic Array。

一、List的创建和赋值

创建List的方法非常简单,直接用方括号[]括起来,其中每个元素之间用逗号分隔,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]

可以看到,我们创建了一个包含5个元素的List。

也可以使用list()函数将其他可迭代对象转换为List,如下所示:

<!--代码块-->
my_string = "Hello World"
my_list = list(my_string)
print(my_list) # ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

向List中添加元素可以使用append()函数、insert()函数和extend()函数,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
my_list.append(6) # [1, 2, 3, 4, 5, 6]
my_list.insert(0, 0) # [0, 1, 2, 3, 4, 5, 6]
my_list.extend([7, 8]) # [0, 1, 2, 3, 4, 5, 6, 7, 8]

二、List的索引和切片

List的索引方式与字符串相同,可以通过下标获取元素,同时也支持负数下标,表示倒数第几个元素。如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
print(my_list[0]) # 1
print(my_list[-1]) # 5

同时,List还支持切片,可以通过下标范围获取部分元素,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
print(my_list[1:3]) # [2, 3]

需要注意的是,切片下标是左闭右开的区间,即左边的下标对应的元素会被包含,右边的下标对应的元素不会被包含。

三、List的删除和修改

与添加元素相对应,List还提供了多种删除元素的方法,如下所示:

<!--代码块-->
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8]
my_list.pop() # 8,删除最后一个元素
my_list.pop(0) # 0,删除第一个元素
my_list.remove(2) # [1, 3, 4, 5, 6, 7],删除特定元素

同时,List也支持直接对元素进行修改,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
my_list[0] = 0 # [0, 2, 3, 4, 5]

四、List的排序和反转

List支持多种排序方式,可以使用sort()函数进行排序,如下所示:

<!--代码块-->
my_list = [2, 3, 1, 5, 4]
my_list.sort() # [1, 2, 3, 4, 5]

当List中的元素为对象时,也可以通过传入关键字参数key来指定排序的键,如下所示:

<!--代码块-->
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person({self.name}, {self.age})"

my_list = [Person("Amy", 20), Person("Bob", 18), Person("Cathy", 23)]
my_list.sort(key=lambda x: x.age) # [Person(Bob, 18), Person(Amy, 20), Person(Cathy, 23)]

List也支持反转,可以使用reverse()函数进行反转,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
my_list.reverse() # [5, 4, 3, 2, 1]

五、List的复制和遍历

在Python中,List的赋值操作实际上是引用的传递,因此修改一个List的副本,原List也会被修改。如果需要创建一个原List的副本,可以使用切片或者copy()函数进行复制,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
my_list_copy = my_list[:] # [1, 2, 3, 4, 5]
my_list_copy[0] = 0 # [0, 2, 3, 4, 5]
print(my_list) # [1, 2, 3, 4, 5]

遍历List可以使用for循环,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
for item in my_list:
    print(item)

当需要同时遍历List的下标和元素时,可以使用enumerate()函数,如下所示:

<!--代码块-->
my_list = [1, 2, 3, 4, 5]
for index, item in enumerate(my_list):
    print(index, item)

六、总结

Python List是常用的数据结构之一,它可以用来存储任意元素的集合,并且支持动态调整大小。本文从创建List、索引和切片、删除和修改、排序和反转、复制和遍历等多个方面对List进行了详细的讲解。

完整代码如下所示:

<!--代码块-->
# 创建List
my_list = [1, 2, 3, 4, 5]
my_string = "Hello World"
my_list = list(my_string)
print(my_list)

# 添加元素
my_list.append(6)
my_list.insert(0, 0)
my_list.extend([7, 8])

# 索引和切片
print(my_list[0]) # 1
print(my_list[-1]) # 5
print(my_list[1:3]) # [2, 3]

# 删除和修改
my_list.pop() # 8,删除最后一个元素
my_list.pop(0) # 0,删除第一个元素
my_list.remove(2) # [1, 3, 4, 5, 6, 7],删除特定元素
my_list[0] = 0 # [0, 2, 3, 4, 5]

# 排序和反转
my_list = [2, 3, 1, 5, 4]
my_list.sort() # [1, 2, 3, 4, 5]
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person({self.name}, {self.age})"

my_list = [Person("Amy", 20), Person("Bob", 18), Person("Cathy", 23)]
my_list.sort(key=lambda x: x.age) # [Person(Bob, 18), Person(Amy, 20), Person(Cathy, 23)]
my_list = [1, 2, 3, 4, 5]
my_list.reverse() # [5, 4, 3, 2, 1]

# 复制和遍历
my_list = [1, 2, 3, 4, 5]
my_list_copy = my_list[:]
my_list_copy[0] = 0
print(my_list)
for item in my_list:
    print(item)
for index, item in enumerate(my_list):
    print(index, item)