【Python基础篇】——第3篇:从入门到精通:掌握Python数据类型与数据结构

news2025/2/5 15:45:52

第3篇:数据类型与数据结构

目录

  1. Python中的数据类型概述
  2. 列表(List)
    • 创建列表
    • 列表的基本操作
    • 列表方法
    • 列表推导式
  3. 元组(Tuple)
    • 创建元组
    • 元组的基本操作
    • 元组的不可变性
  4. 字典(Dictionary)
    • 创建字典
    • 字典的基本操作
    • 字典方法
  5. 集合(Set)
    • 创建集合
    • 集合的基本操作
    • 集合方法
  6. 数据结构的选择与应用
  7. 示例代码
  8. 常见问题及解决方法
  9. 总结

Python中的数据类型概述

Python是一种动态类型语言,支持多种内置数据类型和复杂的数据结构。理解这些数据类型和数据结构的特性及其应用场景,是编写高效、可维护代码的基础。

常见的数据类型

  1. 数值类型:包括整数(int)、浮点数(float)、复数(complex)。
  2. 字符串类型:用于表示文本数据。
  3. 布尔类型:表示真(True)或假(False)。
  4. 序列类型:如列表(list)、元组(tuple)、字符串(str)。
  5. 映射类型:字典(dict)。
  6. 集合类型:集合(set)和冻结集合(frozenset)。

本文重点介绍列表、元组、字典和集合这四种常用的数据结构。


列表(List)

列表是Python中最常用的数据结构之一,具有可变性和有序性,允许存储不同类型的元素。

创建列表

# 创建空列表
empty_list = []

# 创建包含元素的列表
fruits = ['苹果', '香蕉', '橙子']
numbers = [1, 2, 3, 4, 5]
mixed = [1, '苹果', 3.14, True]

列表的基本操作

  • 访问元素:使用索引访问,索引从0开始,可以使用负数索引从末尾访问。

    fruits = ['苹果', '香蕉', '橙子']
    print(fruits[0])  # 输出: 苹果
    print(fruits[-1]) # 输出: 橙子
    
  • 切片:获取列表的子集。

    numbers = [1, 2, 3, 4, 5]
    print(numbers[1:3])  # 输出: [2, 3]
    print(numbers[:2])   # 输出: [1, 2]
    print(numbers[3:])   # 输出: [4, 5]
    
  • 修改元素

    fruits = ['苹果', '香蕉', '橙子']
    fruits[1] = '草莓'
    print(fruits)  # 输出: ['苹果', '草莓', '橙子']
    
  • 添加元素

    fruits.append('葡萄')
    print(fruits)  # 输出: ['苹果', '草莓', '橙子', '葡萄']
    
  • 删除元素

    fruits.remove('草莓')
    print(fruits)  # 输出: ['苹果', '橙子', '葡萄']
    
    last_fruit = fruits.pop()
    print(last_fruit)  # 输出: 葡萄
    print(fruits)      # 输出: ['苹果', '橙子']
    

列表方法

方法描述示例
append(x)在列表末尾添加元素xfruits.append('葡萄')
extend(iterable)使用可迭代对象的元素扩展列表fruits.extend(['樱桃', '梨'])
insert(i, x)在指定位置i插入元素xfruits.insert(1, '蓝莓')
remove(x)删除列表中第一个值为x的元素fruits.remove('香蕉')
pop([i])移除并返回指定位置i的元素,默认为最后一个元素last = fruits.pop()
clear()移除列表中的所有元素fruits.clear()
index(x)返回列表中第一个值为x的元素的索引fruits.index('苹果')
count(x)返回x在列表中出现的次数fruits.count('苹果')
sort()对列表进行就地排序numbers.sort()
reverse()将列表中的元素反转fruits.reverse()
copy()返回列表的浅拷贝new_fruits = fruits.copy()

列表推导式

列表推导式是一种简洁的创建列表的方式,通常用于对现有列表进行操作或过滤。

# 创建一个包含1到10的平方的列表
squares = [x**2 for x in range(1, 11)]
print(squares)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 过滤出列表中的偶数
numbers = [1, 2, 3, 4, 5, 6]
evens = [x for x in numbers if x % 2 == 0]
print(evens)  # 输出: [2, 4, 6]

元组(Tuple)

元组与列表类似,但具有不可变性。一旦创建,元组的元素不能被修改、添加或删除。

创建元组

# 创建空元组
empty_tuple = ()

# 创建包含元素的元组
fruits = ('苹果', '香蕉', '橙子')
numbers = (1, 2, 3, 4, 5)
mixed = (1, '苹果', 3.14, True)

元组的基本操作

  • 访问元素:与列表类似,使用索引访问。

    fruits = ('苹果', '香蕉', '橙子')
    print(fruits[0])  # 输出: 苹果
    print(fruits[-1]) # 输出: 橙子
    
  • 切片

    numbers = (1, 2, 3, 4, 5)
    print(numbers[1:3])  # 输出: (2, 3)
    
  • 不可变性

    fruits = ('苹果', '香蕉', '橙子')
    fruits[1] = '草莓'  # 会引发TypeError
    

元组的不可变性

元组的不可变性使其在需要保证数据不被修改的场景下非常有用。例如,用作字典的键或存储固定的配置信息。

# 使用元组作为字典的键
locations = {
    (40.7128, -74.0060): "纽约",
    (34.0522, -118.2437): "洛杉矶",
}
print(locations[(40.7128, -74.0060)])  # 输出: 纽约

字典(Dictionary)

字典是Python中用于存储键值对(key-value)的数据结构,具有高效的查找性能。

创建字典

# 创建空字典
empty_dict = {}

# 创建包含元素的字典
person = {
    'name': 'Alice',
    'age': 25,
    'city': '北京'
}

# 使用dict构造函数
car = dict(make='Toyota', model='Camry', year=2020)

字典的基本操作

  • 访问值:通过键访问对应的值。

    print(person['name'])  # 输出: Alice
    print(person.get('age'))  # 输出: 25
    
  • 修改值

    person['age'] = 26
    print(person['age'])  # 输出: 26
    
  • 添加键值对

    person['email'] = 'alice@example.com'
    print(person)  # 输出: {'name': 'Alice', 'age': 26, 'city': '北京', 'email': 'alice@example.com'}
    
  • 删除键值对

    del person['city']
    print(person)  # 输出: {'name': 'Alice', 'age': 26, 'email': 'alice@example.com'}
    
    removed_value = person.pop('email')
    print(removed_value)  # 输出: alice@example.com
    print(person)         # 输出: {'name': 'Alice', 'age': 26}
    

字典方法

方法描述示例
dict.keys()返回字典中所有的键person.keys()
dict.values()返回字典中所有的值person.values()
dict.items()返回字典中所有的键值对person.items()
dict.get(key, default)返回指定键的值,如果键不存在则返回默认值person.get('name', '未知')
dict.update(other_dict)使用另一个字典更新当前字典person.update({'age': 27, 'gender': '女'})
dict.pop(key, default)移除指定键并返回其值,如果键不存在则返回默认值age = person.pop('age', None)
dict.clear()移除字典中的所有元素person.clear()
dict.copy()返回字典的浅拷贝new_person = person.copy()

集合(Set)

集合是Python中用于存储唯一元素的无序数据结构,适用于去重和集合运算(如并集、交集等)。

创建集合

# 创建空集合
empty_set = set()

# 创建包含元素的集合
fruits = {'苹果', '香蕉', '橙子'}
numbers = {1, 2, 3, 4, 5}
mixed = {1, '苹果', 3.14, True}

注意:创建空集合必须使用set(),而不是{},因为后者表示空字典。

集合的基本操作

  • 添加元素

    fruits.add('葡萄')
    print(fruits)  # 输出: {'苹果', '香蕉', '橙子', '葡萄'}
    
  • 删除元素

    fruits.remove('香蕉')  # 如果元素不存在,会引发KeyError
    fruits.discard('草莓')  # 如果元素不存在,不会引发错误
    print(fruits)  # 输出: {'苹果', '橙子', '葡萄'}
    
  • 清空集合

    fruits.clear()
    print(fruits)  # 输出: set()
    

集合方法

方法描述示例
set.add(elem)向集合添加元素fruits.add('樱桃')
set.remove(elem)移除集合中的指定元素,如果元素不存在则引发错误fruits.remove('苹果')
set.discard(elem)移除集合中的指定元素,如果元素不存在则不操作fruits.discard('香蕉')
set.pop()随机移除并返回一个元素item = fruits.pop()
set.clear()移除集合中的所有元素fruits.clear()
set.union(other_set)返回两个集合的并集all_fruits = fruits.union(tropical_fruits)
set.intersection(other_set)返回两个集合的交集common_fruits = fruits.intersection(tropical_fruits)
set.difference(other_set)返回集合的差集unique_fruits = fruits.difference(tropical_fruits)
set.symmetric_difference(other_set)返回集合的对称差集symmetric_fruits = fruits.symmetric_difference(tropical_fruits)
set.issubset(other_set)判断当前集合是否是另一个集合的子集fruits.issubset(all_fruits)
set.issuperset(other_set)判断当前集合是否是另一个集合的超集all_fruits.issuperset(fruits)

数据结构的选择与应用

不同的数据结构适用于不同的应用场景。选择合适的数据结构可以提高代码的效率和可维护性。

数据结构特性适用场景
列表有序、可变、允许重复元素需要动态添加、删除元素,或者需要保持元素的顺序时
元组有序、不可变、允许重复元素需要保证数据不被修改,或作为字典的键时
字典无序、键唯一、可变需要快速查找、关联键值对的数据时
集合无序、不重复、可变需要去重、进行集合运算(并集、交集等)时

示例应用

  • 列表:存储用户输入的数据,处理动态数据。
  • 元组:存储固定的配置信息,如数据库连接参数。
  • 字典:存储用户信息,快速通过用户名查找对应的详细信息。
  • 集合:统计文章中的独特单词,进行标签的去重。

示例代码

以下示例代码展示了如何使用列表、元组、字典和集合进行基本操作。

# 列表示例
fruits = ['苹果', '香蕉', '橙子']
fruits.append('葡萄')
print(fruits)  # 输出: ['苹果', '香蕉', '橙子', '葡萄']

# 元组示例
coordinates = (40.7128, -74.0060)
print(coordinates)  # 输出: (40.7128, -74.0060)

# 字典示例
person = {
    'name': 'Alice',
    'age': 25,
    'city': '北京'
}
print(person['name'])  # 输出: Alice

# 集合示例
unique_numbers = {1, 2, 3, 2, 1}
print(unique_numbers)  # 输出: {1, 2, 3}

常见问题及解决方法

问题1:列表和元组的区别是什么?

原因:列表是可变的,而元组是不可变的。

解决方法:根据需求选择使用列表还是元组。如果需要修改数据,使用列表;如果数据不需要改变,使用元组以提高代码的安全性和性能。

问题2:如何在字典中查找键是否存在?

解决方法:使用in关键字或字典的get()方法。

person = {'name': 'Alice', 'age': 25}

# 使用in关键字
if 'age' in person:
    print("年龄存在")

# 使用get方法
age = person.get('age')
if age is not None:
    print(f"年龄是 {age}")

问题3:集合中如何进行并集和交集操作?

解决方法:使用union()intersection()方法,或者使用|&运算符。

set1 = {'苹果', '香蕉', '橙子'}
set2 = {'香蕉', '葡萄', '草莓'}

# 并集
union_set = set1.union(set2)
print(union_set)  # 输出: {'苹果', '香蕉', '橙子', '葡萄', '草莓'}

# 交集
intersection_set = set1.intersection(set2)
print(intersection_set)  # 输出: {'香蕉'}

# 使用运算符
union_set = set1 | set2
intersection_set = set1 & set2

问题4:如何对字典进行遍历?

解决方法:可以遍历字典的键、值或键值对。

person = {'name': 'Alice', 'age': 25, 'city': '北京'}

# 遍历键
for key in person:
    print(key)

# 遍历值
for value in person.values():
    print(value)

# 遍历键值对
for key, value in person.items():
    print(f"{key}: {value}")

总结

在本篇文章中,我们深入探讨了Python中的四种常用数据类型和数据结构:列表、元组、字典和集合。通过理解它们的特性、基本操作和适用场景,您可以更有效地组织和处理数据,编写高效、可维护的代码。

学习建议

  1. 实践操作:尝试创建并操作不同的数据结构,熟悉它们的使用方法。
  2. 案例分析:分析实际项目中的数据结构选择,理解其背后的原因。
  3. 优化应用:根据数据结构的特性,优化代码的性能和可读性。

接下来的系列文章将继续深入探讨Python的控制流程与函数,帮助您进一步掌握Python编程的核心概念和技巧。保持学习的热情,持续实践,您将逐步成为一名优秀的Python开发者!


如果您有任何问题或需要进一步的帮助,请随时在评论区留言或联系相关技术社区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机——DS18B20温度传感器

由于DS18B20数字温度传感器是单总线接口,所以需要使用51单片机的一个IO口模拟单总线时序与DS18B20通信,将检测的环境温度读取出来 1、DS18B20模块电路 传感器接口的单总线管脚接至单片机P3.7IO口上 2、DS18B20介绍 2.1 DS18B20外观实物图 管脚1为GN…

Redis的安装和配置、基本命令

一、实验目的 本实验旨在帮助学生熟悉Redis的安装、配置和基本使用,包括启动Redis服务、使用命令行客户端进行操作、配置Redis、进行多数据库操作以及掌握键值相关和服务器相关的命令。 二、实验环境准备 1. JAVA环境准备:确保Java Development Kit …

2、ansible的playbook

ansible的脚本:playbook剧本 脚本的作用:复用 playbook的组成部分 1、开头 ---:表示是一个yaml文件,但是可以忽略。 2、Tasks(任务):包含了目标主机上执行的操作,操作还是由模板来…

vscode的安装与使用

下载 地址:https://code.visualstudio.com/ 安装 修改安装路径(不要有中文) 点击下一步,创建桌面快捷方式,等待安装 安装中文插件 可以根据自己的需要安装python和Jupyter插件

Java : 各版本 jdk 下载及环境变量配置

--------------------------一、 JDK下载 ---------------------------- JDK下载地址:(没有账号提示注册,最好用Chrome 浏览器) Java Archive | Oracle 选择版本安装:(注意不同系统) 下载后按照…

IoTDB 查询时报可用内存不足

现象 IoTDB 3C3D 集群中,进行查询时报可用内存不足,即使是 show devices 这样简单的查询也会报内存不足。 原因 客户目前使用的 JDK 版本是 1.8, 该版本 JDK 对 GC 控制效果不佳,有可能出现可用内存不足的情况,同时 GC 耗时较长…

Jmeter 简单使用、生成测试报告(一)

一、下载Jmter 去官网下载,我下载的是apache-jmeter-5.6.3.zip,解压后就能用。 二、安装java环境 JMeter是基于Java开发的,运行JMeter需要Java环境。 1.下载JDK、安装Jdk 2.配置java环境变量 3.验证安装是否成功(java -versio…

LabVIEW时域近场天线测试

随着通信技术的飞速发展,特别是在5G及未来通信技术中,天线性能的测试需求日益增加。对于短脉冲天线和宽带天线的时域特性测试,传统的频域测试方法已无法满足其需求。时域测试方法在这些应用中具有明显优势,可以提供更快速和精准的…

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好,我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术,以保证图表的实时渲染,当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE? SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …

hive连接mysql报错:Unknown version specified for initialization: 3.1.0

分享下一些报错的可能原因吧 1.要开启hadoop 命令&#xff1a;start-all.sh 2.检查 hive-site.xml 和 hive-env.sh。 hive-site.xml中应设置自己mysql的用户名和密码 我的hive-site.xml如下&#xff1a; <configuration><property><name>javax.jdo.opt…

智能化植物病害检测:使用深度学习与图像识别技术的应用

植物病害一直是农业生产中亟待解决的问题&#xff0c;它不仅会影响作物的产量和质量&#xff0c;还可能威胁到生态环境的稳定。随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;尤其是深度学习和图像识别技术的应用&#xff0c;智能化植物病害检测已经成为一…

LabVIEW桥接传感器数据采集与校准程序

该程序设计用于采集来自桥接传感器的数据&#xff0c;执行必要的设置&#xff08;如桥接配置、信号采集参数、时间与触发设置&#xff09;&#xff0c;并进行适当的标定和偏移校正&#xff0c;最终通过图表呈现采集到的数据信息。程序包括多个模块&#xff0c;用于配置通道、触…

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量&#xff1a;质量评估与改进策略 引言&#xff1a;数据质量的概念 在大数据时代&#xff0c;数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途&#xff0c;确保数据的准确性、完整性、一致性和及时性是数据质量的…

AI时代下 | 通义灵码冲刺备战求职季

AI时代下 | 通义灵码冲刺备战求职季 什么是通义灵码使用智能编程助手备战求职靠谱吗体验心得 AI时代下&#xff0c;备战求职季有了不一样的方法&#xff0c;使用通义灵码冲刺备战求职季&#xff0c;会有什么样的体验&#xff1f; 什么是通义灵码 在开始话题之前&#xff0c;首…

Unity-Mirror网络框架-从入门到精通之RigidbodyBenchmark示例

文章目录 前言示例代码逻辑测试结论性能影响因素最后前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计,它…

IoTDB 数据类型相关问题

指定数据类型 问题 1 IoTDB 通过 tools/import-data.sh 导入数据时&#xff0c;发现默认推断类型配置没有生效&#xff0c;请问是什么原因&#xff1f; 现象 解决方案 通过 tools/import-data.sh 命令导入数据时&#xff0c;需要指定 -typeInfer 参数&#xff0c;用于指定类…

IF=24.5! 综述:机器人纹理识别触觉感知和机器学习进展

最近&#xff0c;人形机器人在学术界和工业界都引起了极大的关注。这些机器人正变得越来越复杂和智能&#xff0c;在医疗保健、教育、客户服务、物流、安全、太空探索等领域都可以看到。这些技术进步的核心是触觉感知&#xff0c;这是类人机器人与外部环境交换信息的关键方式&a…

Flink (六):DataStream API (三) 窗口

1. 窗口 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中&#xff0c;再对每个“桶”加以处理。 下面展示了 Flink 窗口在 keyed streams 和 non-keyed streams 上使用的基本结构。 我们可以看到&#xff0c;这两者唯一的…

【FlutterDart】MVVM(Model-View-ViewModel)架构模式例子-http版本(30 /100)

动图更精彩 MVVM&#xff08;Model-View-ViewModel&#xff09; 特点 Model&#xff1a;负责数据管理和业务逻辑。 View&#xff1a;负责显示数据&#xff0c;通常是一个UI组件。 ViewModel&#xff1a;负责处理用户交互&#xff0c;更新Model&#xff0c;并将数据转换为View可…

C#实现字符串反转的4种方法

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…