全面解析 Python 列表(python列表教程)

liftword4个月前 (01-29)技术文章28


Python 列表(list) 是开发中 最常用 的 Python 数据结构之一。列表支持各种 Python 数据类型,也能方便与 JSON 数据进行转换。

前后端交互中,列表扮演重要角色。虽然列表灵活,但是列表在特殊情况下也需要注意性能问题。

文本还将讲解 Python 生态库中的其他库处理数组的方法。

Python 列表基本概念

本质上Python 在语言层面,没有其他语言的数组的概念。而是使用 list 替代。

Python 列表的特点是:有序的可变的数据集合

与其静态类型语言不同的是, Python 列表极度灵活类型上支持存储任意类型的元素。

my_list = [42, "Hello", 3.14, True, {"name": "Alice", "age": 30}, [1, 2, 3]]

以上示例中:list 使用常用的整型浮点型字符串布尔类型字典以及列表嵌套。

当然如果你要学习使用 Python 可以使用 Jupter Notebook,它很简单,支持分段markdown 文档。


Python 列表基本操作


  • 创建列表: 使用方括号或 list() 构造函数创建列表。
  • 访问元素: 通过索引访问,支持正向和反向索引。
  • 列表切片: 获取子列表,支持开始、结束、步长参数。
  • 修改元素: 通过索引直接修改列表中的元素。
  • 添加元素: 使用 append() 在末尾添加元素,使用 insert() 在指定位置插入元素。
  • 删除元素: 使用 remove() 删除特定值,使用 pop() 删除并返回指定索引的元素,使用 del 删除指定索引的元素或切片。
# 1. 创建列表
# 使用方括号创建
fruits = ["apple", "banana", "cherry", "date"]

# 使用 list() 构造函数创建
numbers = list([1, 2, 3, 4, 5])

# 2. 访问元素
# 正向索引
first_fruit = fruits[0]  # "apple"

# 反向索引
last_number = numbers[-1]  # 5
print("Last number:", last_number)

# 3. 列表切片
# 获取子列表
some_fruits = fruits[1:3]  # ["banana", "cherry"]

# 使用步长参数
even_index_numbers = numbers[::2]  # [1, 3, 5]

# 4. 修改元素
# 修改列表中的元素
fruits[1] = "blueberry"

# 5. 添加元素
# 在末尾添加元素
fruits.append("elderberry")

# 在指定位置插入元素
fruits.insert(2, "cantaloupe")

# 6. 删除元素
# 删除特定值
fruits.remove("apple")

# 删除并返回指定索引的元素
popped_fruit = fruits.pop(2)

# 使用 del 删除指定索引的元素
del fruits[0]

# 使用 del 删除列表切片
del numbers[1:3]

Python 列表常用方法

  • 排序: 使用 sort() 进行就地排序,或使用 sorted() 返回排序后的新列表。
  • 反转: 使用 reverse() 就地反转,或通过切片返回反转后的新列表。
  • 查找元素: 使用 index() 查找元素的索引,使用 count() 统计元素出现的次数。
  • 列表长度: 使用 len() 获取列表长度。
  • 列表复制: 使用 copy() 方法进行浅拷贝。
# 创建示例列表
numbers = [4, 2, 9, 1, 5, 6, 8, 3, 7]

# 1. 排序
# 使用 sort() 进行就地排序
numbers.sort()

# 使用 sorted() 返回排序后的新列表
sorted_numbers = sorted(numbers, reverse=True)

# 2. 反转
# 使用 reverse() 就地反转
numbers.reverse()

# 使用切片返回反转后的新列表
reversed_numbers = numbers[::-1]

# 3. 查找元素
# 使用 index() 查找元素的索引
index_of_5 = numbers.index(5)

# 使用 count() 统计元素出现的次数
count_of_2 = numbers.count(2)

# 4. 列表长度
length_of_numbers = len(numbers)

# 5. 列表复制
# 使用 copy() 方法进行浅拷贝
copied_numbers = numbers.copy()

# 验证拷贝是浅拷贝(修改原列表不影响拷贝)
numbers.append(10)

Python 列表高级操作


  • 列表推导式: 通过表达式快速生成列表,支持条件过滤。
  • 嵌套列表: 列表内包含列表,用于表示矩阵或多维数据。
  • 解包与链式赋值: 解包列表元素至多个变量,支持链式赋值。
  • 合并与重复: 使用 + 合并列表,使用 * 重复列表元素。
  • zip 函数: 并行迭代多个列表,生成元素对的迭代器。
# 1. 列表推导式
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 使用列表推导式将矩阵展平
flattened = [elem for row in matrix for elem in row]

# 生成偶数的平方数列表
even_squares = [x**2 for x in range(10) if x % 2 == 0]

# 2. 嵌套列表
# 访问矩阵中的元素
element = matrix[1][2]  # 6

# 3. 解包与链式赋值
# 解包列表
values = [10, 20, 30]
a, b, c = values

# 链式赋值
x = y = z = 42
print("x:", x, "y:", y, "z:", z)

# 4. 合并与重复
# 合并两个列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list1 + list2

# 重复列表元素
repeated_list = list1 * 3

# 5. zip 函数
# 两个列表
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 88]

# 使用 zip 合并两个列表
zipped = list(zip(names, scores))

# 解压缩
unzipped_names, unzipped_scores = zip(*zipped)

Python 列表性能优化

  • 使用生成器代替列表: 在处理大数据时,通过生成器减少内存占用。
  • 避免不必要的复制: 尽量在原地修改列表,避免内存浪费。
# 使用生成器来处理大数据,减少内存占用
def generate_squares(n):
    for x in range(n):
        yield x**2

# 创建一个生成器
squares_gen = generate_squares(10**6)

# 计算生成器中的前5个平方数
for _ in range(5):
    print(next(squares_gen))

# 使用生成器的优点是它不会一次性占用大量内存

# 原地修改列表以避免不必要的复制
large_list = list(range(10**6))

# 原地修改:将每个元素加1
for i in range(len(large_list)):
    large_list[i] += 1

# 打印修改后的前5个元素
print("First few elements of modified list:", large_list[:5])

Python 列表与JSON

在 web 开发中,JSON 数据传递是最为常见的数据使用场景,数组转换成 JSON 列表是常见的需求,Python 标准库提供了 json 包。使得我们能够方便的在两者数据之间进行转换。

import json

data_list = [
    {
        "name": "John",
        "age": 30,
        "children": [
            {"name": "Jane", "age": 10},
            {"name": "Doe", "age": 5}
        ]
    }
]

# 1. 将 Python 列表转换为 JSON 字符串
json_string = json.dumps(data_list, indent=4)

# 2. 将 JSON 字符串转换为 Python 列表
parsed_data = json.loads(json_string)

Python 列表循环和遍历


既然是列表,循环遍历其中的数据,是常见需求循环和遍历方式,大体还是 for-in 以及函数方法,以及列表推导。

numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]

# 1. 使用 for 循环遍历列表
for fruit in fruits:
    print(fruit)

# 2. 使用 enumerate() 遍历列表及其索引
for index, fruit in enumerate(fruits):
    print(f"Index: {index}, Fruit: {fruit}")

# 3. 使用 while 循环遍历列表
index = 0
while index < len(fruits):
    print(fruits[index])
    index += 1

# 4. 使用 map() 函数遍历列表
def square(x):
    return x ** 2

# 创建一个 map 对象
squared_numbers = map(square, numbers)

# 遍历 map 对象
for num in squared_numbers:
    print(num)

# 5. 使用 filter() 函数遍历列表
def is_even(x):
    return x % 2 == 0

# 创建一个 filter 对象
even_numbers = filter(is_even, numbers)

# 遍历 filter 对象
for num in even_numbers:
    print(num)

# 6. 使用列表推导式(作为遍历的变体)
squared_numbers = [x ** 2 for x in numbers]

Python 标准库 array

Python 标准库中的 array 模块提供了一个数组类型,用于存储固定类型的数据。

import array

# 创建一个整数数组
int_array = array.array('i', [1, 2, 3, 4, 5])
print("Array contents:", int_array)

# 访问数组中的元素
print("First element:", int_array[0])

Python NumPy 库中的数组

NumPy 数组:高性能、多维数组,适用于科学计算和数据分析。

import numpy as np

numpy_array = np.array([1, 2, 3, 4, 5])

print("Array shape:", numpy_array.shape) # Array shape: (5,)
print("Array mean:", numpy_array.mean()) # Array mean: 3.0

Python Pandas 库中数据框

Pandas 数据框:适用于数据分析处理,提供了强大的功能和操作方法。

import pandas as pd

# 创建一个 Pandas Series(类似于一维数组)
series = pd.Series([1, 2, 3, 4, 5])

# 创建一个 Pandas DataFrame(类似于二维数组)
data = {'Column1': [1, 2, 3], 'Column2': [4, 5, 6]}
df = pd.DataFrame(data)

小结

  • Python 列表在灵活性易用性方面表现出色,但在性能效率方面可能存在一些限制。
  • 对于需要处理大量数据或执行复杂数值计算的任务,建议使用专门的数据结构(如 NumPy 数组、Pandas 数据框等),这些库提供了优化的性能和额外的功能。
  • 相关文章

    删除 Python 列表中的最后一个元素

    列表是 Python 中一种重要的数据结构,在某些情况下,可能需要从列表中删除最后一个元素。在本文中,我们将介绍删除列表中最后一个元素的多种方法。方法 1:使用 pop() 方法删除列表中最后一个元素...

    玩转Python—列表使用教程(python列表讲解)

    上一讲给大家介绍了Python的列表,今天继续给大家介绍Python中列表的使用。1.列表的元素的赋值#实例 >>>num=[1,2,3,4,5,6,7,7,8,8,9] >...

    python中元组,列表,字典,集合删除项目方式的归纳

    九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...

    list列表基本操作(list的基本操作)

    【实验目的】1、掌握list列表的基本操作【实验原理】列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字 - 它...

    python中列表类型(python列表类型6个问题)

    Python 中的列表(List)类型是一种有序的数据集合,用于存储一系列的元素。列表中的元素可以是不同类型的数据,包括数字、字符串、列表(嵌套列表)等。列表是可变的(mutable),意味着你可以在...

    Python编程:List数据类型(python里的list如何用)

    1.什么是List?列表(List) 是Python中最基本的数据结构。列表中的每个元素都分配一个数字 , 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。列表的数据项不需要具有相同的类型...