零基础上手Python数据分析 (4):Python数据结构精讲 - 列表、元组、字典、集合

写在前面

回顾一下,在之前的博客中,我们学习了 Python 的基本数据类型(数值、字符串、布尔值)和核心语法(运算符、变量、流程控制、函数、模块)。 现在,我们已经掌握了 Python 编程的基础知识。 接下来,我们将进入数据分析的关键环节: 数据组织

在数据分析中,数据往往不是孤立存在的,而是以 结构化的方式 组织起来的。 例如,一份销售数据报表,包含多个字段(日期、商品名称、销售额、地区等),这些字段之间相互关联,共同描述了销售情况。 高效地组织和管理这些数据,对于后续的数据分析至关重要。

Excel 表格的局限性:数据组织与处理的瓶颈

对于习惯使用 Excel 的朋友来说,Excel 表格是常用的数据组织方式。 但当数据量增大、数据结构复杂时,Excel 的局限性就显现出来了:

  • 数据组织形式单一,难以应对复杂数据结构。 Excel 主要以二维表格形式组织数据,对于更复杂的数据结构(例如树状结构、网络结构等)难以有效表示和处理。
  • 数据处理效率低下,操作繁琐。 当数据量较大时,Excel 的筛选、排序、查找等操作会变得缓慢,复杂的公式和函数也难以维护和扩展。
  • 代码复用性差,自动化程度低。 Excel 的 VBA 脚本虽然可以实现一定程度的自动化,但学习成本高,代码复用性差,难以构建大型的数据分析流程。

Python 数据结构:数据组织的强大武器

Python 提供了丰富的数据结构,例如 列表 (List)元组 (Tuple)字典 (Dictionary)集合 (Set) 等,它们可以灵活、高效地组织和管理各种类型的数据,并为后续的数据分析提供强大的支持。

  • 列表 (List): 有序、可变的数据集合,像 Excel 中的一列数据,但功能更强大,可以存储不同类型的数据,并进行灵活的增删改查操作。
  • 元组 (Tuple): 与列表类似,但不可变,更轻量级,常用于表示不可修改的数据集合。
  • 字典 (Dictionary): 键值对形式的数据集合,像 Excel 中的查找表,但查找效率更高,可以快速根据键找到对应的值,非常适合存储结构化数据。
  • 集合 (Set): 无序、唯一元素的数据集合,用于去重、集合运算等,在数据清洗和特征工程中非常有用。

掌握这些 Python 数据结构,你将能够:

  • 更灵活地组织和管理各种类型的数据,应对更复杂的数据分析场景。
  • 更高效地处理和操作数据,提升数据分析效率。
  • 为后续学习 Pandas 等数据分析库打下坚实的基础。

本篇博客将深入讲解这四种常用的 Python 数据结构,让你掌握数据组织的强大武器,为高效数据分析做好充分准备。

📊 一、列表 (List):有序可变的数据容器

列表 (List) 是 Python 中最常用的数据结构之一,它是一个 有序可变 的数据集合,可以存储多个元素,元素可以是不同的数据类型,并且允许重复元素。 列表非常类似于 Excel 中的一列数据,但功能更加强大和灵活。

1. 列表的创建

列表使用 方括号 [ ] 包裹,元素之间用 逗号 , 分隔。

# 创建列表的几种方式
numbers = [1, 2, 3, 4, 5]         # 数字列表
names = ['Alice', 'Bob', 'Charlie'] # 字符串列表
mixed_list = [1, 'hello', 3.14, True] # 混合类型列表
empty_list = []                  # 空列表
list_from_tuple = list((1, 2, 3)) # 从元组创建列表
list_from_range = list(range(5))  # 从 range 对象创建列表

2. 列表的特性

  • 有序性 (Ordered): 列表中的元素按照 插入顺序 排列,可以通过 索引 (index) 访问元素,索引从 0 开始。

    my_list = ['a', 'b', 'c', 'd']
    print(my_list[0])  # 输出:a (第一个元素,索引为 0)
    print(my_list[2])  # 输出:c (第三个元素,索引为 2)
    print(my_list[-1]) # 输出:d (最后一个元素,索引为 -1)
    
  • 可变性 (Mutable): 列表创建后,可以 修改 列表中的元素,例如添加、删除、修改元素。

    my_list = [1, 2, 3]
    my_list[0] = 10      # 修改第一个元素
    print(my_list)      # 输出:[10, 2, 3]
    
    my_list.append(4)   # 在列表末尾添加元素
    print(my_list)      # 输出:[10, 2, 3, 4]
    
    del my_list[1]      # 删除索引为 1 的元素
    print(my_list)      # 输出:[10, 3, 4]
    
  • 允许重复元素 (Duplicates Allowed): 列表中可以包含 相同的元素

    my_list = [1, 2, 2, 3, 3, 3]
    print(my_list)      # 输出:[1, 2, 2, 3, 3, 3] (包含重复元素 2 和 3)
    

3. 列表的常用操作

  • 索引和切片 (Indexing and Slicing):

    • 索引访问: list[index] 访问指定索引位置的元素。
    • 切片: list[start:stop:step] 获取列表的子列表 (切片)。 start 为起始索引 (包含),stop 为结束索引 (不包含),step 为步长 (默认为 1)。
    numbers = [10, 20, 30, 40, 50, 60]
    
    print(numbers[1])       # 索引访问,输出:20 (索引为 1 的元素)
    print(numbers[2:5])     # 切片,输出:[30, 40, 50] (索引 2, 3, 4 的元素)
    print(numbers[:3])      # 切片,输出:[10, 20, 30] (从开始到索引 3 之前的元素)
    print(numbers[4:])      # 切片,输出:[50, 60] (从索引 4 到末尾的元素)
    print(numbers[::2])     # 切片,输出:[10, 30, 50] (步长为 2)
    print(numbers[::-1])    # 切片,输出:[60, 50, 40, 30, 20, 10] (倒序列表)
    
  • 添加元素:

    • append(element): 在列表 末尾 添加一个元素。
    • insert(index, element): 在列表的 指定索引位置 插入一个元素。
    • extend(iterable): 将 另一个可迭代对象 (例如列表、元组) 的所有元素 追加到列表末尾
    fruits = ['apple', 'banana']
    
    fruits.append('orange')      # 末尾添加 'orange'
    print(fruits)              # 输出:['apple', 'banana', 'orange']
    
    fruits.insert(1, 'grape')    # 在索引 1 处插入 'grape'
    print(fruits)              # 输出:['apple', 'grape', 'banana', 'orange']
    
    more_fruits = ['mango', 'kiwi']
    fruits.extend(more_fruits)    # 追加另一个列表的元素
    print(fruits)              # 输出:['apple', 'grape', 'banana', 'orange', 'mango', 'kiwi']
    
  • 删除元素:

    • remove(element): 删除列表中 第一个匹配 的指定元素的值。 如果元素不存在,会报错。
    • pop(index=-1): 删除列表中 指定索引位置 的元素,并 返回被删除的元素。 默认删除最后一个元素。
    • del list[index]del list[start:stop]: 使用 del 语句删除指定索引或切片范围内的元素。
    colors = ['red', 'green', 'blue', 'yellow', 'green']
    
    colors.remove('green')    # 删除第一个 'green'
    print(colors)            # 输出:['red', 'blue', 'yellow', 'green']
    
    removed_color = colors.pop(2) # 删除索引 2 的元素 ('yellow'),并返回被删除的元素
    print(colors)            # 输出:['red', 'blue', 'green']
    print("Removed color:", removed_color) # 输出:Removed color: yellow
    
    del colors[0]          # 删除索引 0 的元素 ('red')
    print(colors)            # 输出:['blue', 'green']
    
    del colors[0:2]        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kakaZhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值