Python数据结构-数组

在Python中,有几种常用的数组结构,每种都有其特点和适用场景:

Python数据结构-数组_第1张图片

1. 列表(List) - 最常用的动态数组

my_list = [1, 2, 3, 'a', 'b']  # 可以混合不同类型

特点

  • 动态数组实现,自动扩容

  • 可存储任意类型的对象

  • 可变序列(可修改)

  • 支持索引和切片操作

常用操作

# 添加元素
my_list.append(4)        # 末尾添加 O(1)
my_list.insert(1, 'x')   # 指定位置插入 O(n)

# 删除元素
my_list.pop()           # 末尾删除 O(1)
my_list.pop(0)          # 指定位置删除 O(n)
my_list.remove('a')     # 删除指定值 O(n)

# 查找
'a' in my_list          # O(n)
my_list.index('b')      # O(n)

# 排序
my_list.sort()          # O(n log n) - 仅当元素可比较时

2. 元组(Tuple) - 不可变数组

my_tuple = (1, 2, 3, 'a', 'b')

特点

  • 不可变序列(创建后不能修改)

  • 比列表更节省内存

  • 可作为字典的键(因为不可变)

3. array模块 - 类型化数组

from array import array
int_array = array('i', [1, 2, 3])  # 'i'表示有符号整数

特点

  • 存储单一类型的基本数值(整数、浮点数等)

  • 比列表更节省内存

  • 性能接近C数组

4. NumPy数组 - 高性能数值计算

import numpy as np
np_array = np.array([1, 2, 3], dtype=np.int32)

特点

  • 专为数值计算设计

  • 固定类型,高效存储

  • 支持向量化操作

  • 丰富的数学函数和线性代数运算

5. 字符串(String) - 不可变的字符数组

my_str = "hello"

特点

  • 不可变序列

  • 专门用于文本处理

  • 支持许多字符串特有的方法

选择指南

需求 推荐结构
通用序列,需要修改 List
不可变序列 Tuple
数值数据,内存敏感 array模块
高性能数值计算 NumPy数组
文本处理 String

刷题记录leetcode

        两数之和LeetCode第一题:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 

class Solution(object):
    def twoSum(self, nums, target):
        length = len(nums)
        for i in range(length):
            for j in range(i + 1, length):
                if nums[i] + nums[j] == target:
                    return [i, j]
        return [0,0]

        杨辉三角LeetCode第118题:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

# 双层循环,外层是行数,内层是生成当前行的数组。
# 当前行的数组是上层行数组内的值两两相加所得。
class Solution(object):
    def generate(self, numRows):
        # 当numRows为1时输出[[1]]切范围在1最小值
        ret = [[1]]
        for i in range(1, numRows):
            
            temp = [1]
            # 内层是由上层两两相加的到的结果
            for j in range(1, len(ret[i-1])):
                temp.append(ret[i-1][j-1] + ret[i-1][j])
            # 最外层是1
            temp.append(1)
            ret.append(temp)
        return ret

这两天会要刷完所有的数组题型。

你可能感兴趣的:(Python刷题,python,学习)