Python 零基础教程

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)  # 输出: cherry

2.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)  # 输出: cherry

3. 列表切片 (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)  # 输出: 9

5. 列表推导式 (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']