Python 列表 (List)
列表(Lists)是 Python 中的基础数据结构,作为一种有序集合,它可以容纳各种数据类型的元素。
列表提供了一种灵活的方式来存储、访问和操作数据,这使得它们在各种编程任务中不可或缺。
本章将全面涵盖列表的创建、访问和修改操作,为你提供在程序中高效利用列表的基础知识。
1. 创建列表
在 Python 中,我们使用方括号 [] 来创建列表。列表内的元素通过逗号分隔。一个列表可以包含相同数据类型的元素,也可以混合包含不同的数据类型。
1.1 空列表
空列表是指不包含任何元素的列表。你可以直接使用一对空的方括号来创建它。
# 创建一个空列表
empty_list = []
print(empty_list) # 输出: []1.2 包含元素的列表
列表在初始化时可以放入各种数据类型的元素,比如整数(integers)、浮点数(floats)、字符串(strings),甚至是其他列表。
# 创建一个整数列表
integer_list = [1, 2, 3, 4, 5]
print(integer_list) # 输出: [1, 2, 3, 4, 5]
# 创建一个字符串列表
string_list = ["apple", "banana", "cherry"]
print(string_list) # 输出: ['apple', 'banana', 'cherry']
# 创建一个包含混合数据类型的列表
mixed_list = [1, "hello", 3.14, True]
print(mixed_list) # 输出: [1, 'hello', 3.14, True]
# 创建一个嵌套列表(列表中的列表)
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list) # 输出: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]1.3 使用 list() 构造函数创建列表
list() 构造函数可以将其他可迭代对象(如字符串、元组或集合)转换为列表。
# 从字符串创建一个列表
string = "Python"
list_from_string = list(string)
print(list_from_string) # 输出: ['P', 'y', 't', 'h', 'o', 'n']
# 从元组创建一个列表
tuple_example = (1, 2, 3)
list_from_tuple = list(tuple_example)
print(list_from_tuple) # 输出: [1, 2, 3]2. 访问列表元素
我们可以通过元素的索引(index)来访问列表中的数据。在 Python 中,列表的索引是从 0 开始的:第一个元素的索引是 0,第二个元素的索引是 1,依此类推。
2.1 正向索引
正向索引指的是从列表的开头向后访问元素。
my_list = ["apple", "banana", "cherry", "date"]
# 访问第一个元素(索引 0)
first_element = my_list[0]
print(first_element) # 输出: apple
# 访问第三个元素(索引 2)
third_element = my_list[2]
print(third_element) # 输出: cherry2.2 负向索引
负向索引允许你从列表的末尾向前访问元素。最后一个元素的索引是 -1,倒数第二个元素的索引是 -2,依此类推。
my_list = ["apple", "banana", "cherry", "date"]
# 访问最后一个元素(索引 -1)
last_element = my_list[-1]
print(last_element) # 输出: date
# 访问倒数第二个元素(索引 -2)
second_last_element = my_list[-2]
print(second_last_element) # 输出: cherry3. 列表切片 (Slicing)
切片操作允许你通过指定一个索引范围来提取列表的一部分。切片的语法是 list[start:end:step]。
- start(起始): 包含在切片中的第一个元素的索引(包含该索引)。如果省略,默认从
0开始。 - end(结束): 切片结束前的元素索引(不包含该索引本身)。如果省略,默认到列表的末尾。
- step(步长): 切片中每个索引之间的增量。如果省略,默认为
1。
my_list = ["apple", "banana", "cherry", "date", "elderberry"]
# 从索引 1 切片到索引 3(不包含 3)
slice_1 = my_list[1:3]
print(slice_1) # 输出: ['banana', 'cherry']
# 从开头切片到索引 4(不包含 4)
slice_2 = my_list[:4]
print(slice_2) # 输出: ['apple', 'banana', 'cherry', 'date']
# 从索引 2 切片到末尾
slice_3 = my_list[2:]
print(slice_3) # 输出: ['cherry', 'date', 'elderberry']
# 以步长 2 进行切片
slice_4 = my_list[0:5:2]
print(slice_4) # 输出: ['apple', 'cherry', 'elderberry']
# 切片整个列表(创建一个副本)
slice_5 = my_list[:]
print(slice_5) # 输出: ['apple', 'banana', 'cherry', 'date', 'elderberry']
# 使用负数步长反转列表
slice_6 = my_list[::-1]
print(slice_6) # 输出: ['elderberry', 'date', 'cherry', 'banana', 'apple']4. 访问嵌套列表元素
想要访问嵌套列表(列表里的列表)中的元素,你需要使用多个索引,每个索引对应一个嵌套层级。
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 访问第一个子列表的第一个元素
element_1 = nested_list[0][0]
print(element_1) # 输出: 1
# 访问第二个子列表的第二个元素
element_2 = nested_list[1][1]
print(element_2) # 输出: 5
# 访问第三个子列表的第三个元素
element_3 = nested_list[2][2]
print(element_3) # 输出: 95. 列表推导式 (List Comprehension)
列表推导式提供了一种简洁的方法,基于现有的列表来创建新列表。它通常用于对元素进行修改或过滤。
numbers = [1, 2, 3, 4, 5]
# 创建一个新列表,其中每个数字都被平方
squared_numbers = [x**2 for x in numbers]
print(squared_numbers) # 输出: [1, 4, 9, 16, 25]
# 创建一个只包含偶数的新列表 (过滤)
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers) # 输出: [2, 4]
# 创建一个新列表,将字符串全部转换为大写
words = ["hello", "world"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # 输出: ['HELLO', 'WORLD']