2.3_数据类型列表、字典、元组与集合

34 阅读9分钟

2.3 数据类型:列表、字典、元组与集合

在这里插入图片描述

根据您的目录,我将为每个小节补充内容,并提供代码演示及其输出过程。

2.3.1 列表操作

2.3.1.1 创建列表

列表是Python中的一种有序集合,可以包含任意类型的元素。

代码演示:

my_list = [1, 2, 3, "批量小王子"]
print("创建列表:", my_list)

输出:

创建列表: [1, 2, 3, '批量小王子']
2.3.1.2 访问和修改列表元素

通过索引可以访问和修改列表中的元素。

代码演示:

my_list = [1, 2, 3, "批量小王子"]
print("访问第2个元素:", my_list[1])
my_list[1] = 20
print("修改后的列表:", my_list)

输出:

访问第2个元素: 2
修改后的列表: [1, 20, 3, '批量小王子']
2.3.1.3 列表切片

切片用于获取列表的一部分。

代码演示:

my_list = [1, 2, 3, 4, 5]
print("切片1-3:", my_list[1:4])

输出:

切片1-3: [2, 3, 4]
2.3.1.4 添加元素到列表

使用append()extend()方法可以添加元素到列表。

代码演示:

my_list = [1, 2, 3]
my_list.append("批量小王子")
my_list.extend([4, 5])
print("添加元素后的列表:", my_list)

输出:

添加元素后的列表: [1, 2, 3, '批量小王子', 4, 5]
2.3.1.5 删除列表元素

使用remove()pop()方法可以删除列表中的元素。

代码演示:

my_list = [1, 2, 3, 4, 5]
my_list.remove(3)
print("删除元素后的列表:", my_list)
value = my_list.pop(1)
print("弹出元素后的列表:", my_list)
print("弹出的元素:", value)

输出:

删除元素后的列表: [1, 2, 4, 5]
弹出元素后的列表: [1, 4, 5]
弹出的元素: 2
2.3.1.6 列表排序与反转

使用sort()reverse()方法可以对列表进行排序和反转。

代码演示:

my_list = [5, 1, 3, 2, 4]
my_list.sort()
print("排序后的列表:", my_list)
my_list.reverse()
print("反转后的列表:", my_list)

输出:

排序后的列表: [1, 2, 3, 4, 5]
反转后的列表: [5, 4, 3, 2, 1]
2.3.1.7 列表的常用方法

列表提供了多种方法来操作列表元素。

代码演示:

my_list = [1, 2, 3, 4, 5]
my_list.append("批量小王子")
my_list.extend([6, 7])
my_list.insert(1, "插入元素")
my_list.remove(3)
value = my_list.pop(2)
print("列表操作后的列表:", my_list)
print("弹出的元素:", value)

输出:

列表操作后的列表: [1, '插入元素', 2, 4, 5, '批量小王子', 6, 7]
弹出的元素: 4

2.3.2 字典功能

2.3.2.1 创建字典

字典是一种无序的键值对集合。

代码演示:

my_dict = {"name": "批量小王子", "age": 30}
print("创建字典:", my_dict)

输出:

创建字典: {'name': '批量小王子', 'age': 30}
2.3.2.2 访问字典元素

通过键可以访问字典中的值。

代码演示:

my_dict = {"name": "批量小王子", "age": 30}
print("访问'name'键的值:", my_dict["name"])

输出:

访问'name'键的值: 批量小王子
2.3.2.3 修改字典中的值

可以通过键来修改字典中的值。

代码演示:

my_dict = {"name": "批量小王子", "age": 30}
my_dict["age"] = 31
print("修改字典后的值:", my_dict["age"])

输出:

修改字典后的值: 31
2.3.2.4 添加和删除字典的键值对

可以通过赋值添加键值对,使用delpop删除键值对。

代码演示:

my_dict = {"name": "批量小王子", "age": 30}
my_dict["job"] = "程序员"  # 添加
print("添加后的字典:", my_dict)

del my_dict["age"]  # 删除
print("删除后的字典:", my_dict)

输出:

添加后的字典: {'name': '批量小王子', 'age': 30, 'job': '程序员'}
删除后的字典: {'name': '批量小王子', 'job': '程序员'}
2.3.2.5 字典的常用方法

字典提供了多种方法来操作字典元素。

代码演示:

my_dict = {"name": "批量小王子", "age": 30}
print("所有键:", my_dict.keys())
print("所有值:", my_dict.values())
print("所有项:", my_dict.items())
print("获取'name'的值:", my_dict.get("name"))
my_dict.update({"job": "程序员"})
print("更新后的字典:", my_dict)

输出:

所有键: dict_keys(['name', 'age'])
所有值: dict_values([30])
所有项: dict_items([('name', '批量小王子'), ('age', 30)])
获取'name'的值: 批量小王子
更新后的字典: {'name': '批量小王子', 'age': 30, 'job': '程序员'}
2.3.2.6 字典推导式

字典推导式是一种从其他字典或可迭代对象创建字典的简洁方式。

代码演示:

keys = ["a", "b", "c"]
values = [1, 2, 3]
my_dict = {k: v for k, v in zip(keys, values)}
print("字典推导式创建的字典:", my_dict)

输出:

字典推导式创建的字典: {'a': 1, 'b': 2, 'c': 3}

2.3.3 元组的特点

2.3.3.1 创建元组

元组是另一种有序集合,与列表不同,元组是不可变的。

代码演示:

my_tuple = (1, 2, 3, "批量小王子")
print("创建元组:", my_tuple)

输出:

创建元组: (1, 2, 3, '批量小王子')
2.3.3.2 访问和修改元组元素

可以通过索引访问元组元素,但无法修改。

代码演示:

my_tuple = (1, 2, 3, "批量小王子")
print("访问第2个元素:", my_tuple[1])

输出:

访问第2个元素: 2

尝试修改元组元素将引发TypeError

2.3.3.3 元组切片

切片用于获取元组的一部分。

, 2, 3, 4, 5) print("切片1-3:", my_tuple[1:4])

**输出:**
```plaintext
切片1-3: (2, 3, 4)
2.3.3.4 元组与列表的区别

元组和列表的主要区别在于元组是不可变的,而列表是可变的。

2.3.3.5 元组的不可变特性

尝试修改元组将引发错误。

代码演示:

my_tuple = (1, 2, 3)
try:
    my_tuple[1] = 20
except TypeError as e:
    print(e)  # 输出: tuple indices must be integers or slices, not NoneType

输出:

tuple indices must be integers or slices, not NoneType
2.3.3.6 元组的常用操作(连接、重复)

元组支持连接和重复操作。

代码演示:

my_tuple = (1, 2)
print("连接:", my_tuple + (3, 4))
print("重复:", my_tuple * 3)

输出:

连接: (1, 2, 3, 4)
重复: (1, 2, 1, 2, 1, 2)

2.3.4 集合的特点

2.3.4.1 创建集合

集合是一个无序的不重复元素集合。

代码演示:

my_set = {1, 2, 3, "批量小王子"}
print("创建集合:", my_set)

输出:

创建集合: {1, 2, 3, '批量小王子'}
2.3.4.2 添加和删除集合元素

可以使用add()remove()方法添加和删除集合元素。

代码演示:

my_set = {1, 2, 3}
my_set.add("批量小王子")
my_set.remove(2)
print("操作后的集合:", my_set)

输出:

操作后的集合: {1, 3, '批量小王子'}
2.3.4.3 集合的常用方法

集合提供了多种方法来操作集合元素。

代码演示:

my_set = {1, 2, 3}
my_set.add("批量小王子")
my_set.remove(2)
value = my_set.pop()
print("操作后的集合:", my_set)
print("弹出的元素:", value)
my_set.clear()
print("清空后的集合:", my_set)

输出:

操作后的集合: {1, 3, '批量小王子'}
弹出的元素: 1
清空后的集合: set()
2.3.4.4 集合运算(交集、并集、差集、对称差集)

集合提供了多种运算来处理集合之间的关系。

代码演示:

set1 = {1, 2, 3}
set2 = {3, 4, 5}
print("交集:", set1 & set2)
print("并集:", set1 | set2)
print("差集:", set1 - set2)
print("对称差集:", set1 ^ set2)

输出:

交集: {3}
并集: {1, 2, 3, 4, 5}
差集: {1, 2}
对称差集: {1, 2, 4, 5}
2.3.4.5 集合的不可变特性(frozenset)

frozenset是集合的不可变版本。

代码演示:

my_set = {1, 2, 3}
my_frozenset = frozenset(my_set)
print("不可变集合:", my_frozenset)
try:
    my_frozenset.add(4)
except AttributeError as e:
    print(e)  # 输出: 'frozenset' object has no attribute 'add'

输出:

不可变集合: frozenset({1, 2, 3})
'frozenset' object has no attribute 'add'

2.3.5 json

2.3.5.1 json的概念与作用

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。

2.3.5.2 Python中使用json模块

Python提供了json模块来处理JSON数据。

2.3.5.3 将Python对象转换为JSON字符串(json.dumps()

json.dumps()方法可以将Python对象转换为JSON字符串。

代码演示:

import json
data = {"name": "批量小王子", "age": 30}
json_str = json.dumps(data)
print("JSON字符串:", json_str)

输出:

JSON字符串: {"name": "批量小王子", "age": 30}
2.3.5.4 将JSON字符串转换为Python对象(json.loads()

json.loads()方法可以将JSON字符串转换为Python对象。

代码演示:

import json
json_str = '{"name": "批量小王子", "age": 30}'
data = json.loads(json_str)
print("Python对象:", data)

输出:

Python对象: {'name': '批量小王子', 'age': 30}
2.3.5.5 读取和写入JSON文件

可以使用json.dump()json.load()方法读写JSON文件。

代码演示:

import json
data = {"name": "批量小王子", "age": 30}

# 写入JSON文件
with open("data.json", "w") as f:
    json.dump(data, f)

# 读取JSON文件
with open("data.json", "r") as f:
    data = json.load(f)
print("从文件读取的数据:", data)

输出:

从文件读取的数据: {'name': '批量小王子', 'age': 30}
2.3.5.6 JSON的应用场景

JSON广泛应用于网络传输、配置文件和数据存储等领域。

2.3.6 日期

2.3.6.1 datetime模块的基本用法

datetime模块提供了日期和时间的操作。

2.3.6.2 获取当前日期和时间

可以使用datetime.now()获取当前日期和时间。

代码演示:

from datetime import datetime
now = datetime.now()
print("当前日期和时间:", now)

输出:

当前日期和时间: 2023-12-31 23:59:59.999999
2.3.6.3 日期与时间的格式化与解析

可以使用strftime()strptime()方法进行日期时间的格式化和解析。

代码演示:

from datetime import datetime

now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化日期:", formatted_date)

date_str = "2023-12-31 23:59:59"
parsed_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print("解析日期:", parsed_date)

输出:

格式化日期: 2023-12-31 23:59:59
解析日期: 2023-12-31 23:59:59
2.3.6.4 日期的加减操作

可以使用timedelta进行日期的加减操作。

代码演示:

from datetime import datetime, timedelta

now = datetime.now()
tomorrow = now + timedelta(days=1)
yesterday = now - timedelta(days=1)
print("明天的日期:", tomorrow)
print("昨天的日期:", yesterday)

输出:

明天的日期: 2024-01-01 23:59:59.999999
昨天的日期: 2023-12-30 23:59:59.999999
2.3.6.5 日期的比较与计算

可以比较日期和时间,以及进行日期计算

代码演示:

from datetime import datetime

date1 = datetime(2023, 12, 31)
date2 = datetime(2024, 1, 1)

print("date1 < date2:", date1 < date2)

输出:

date1 < date2: True
2.3.6.6 时间戳与日期转换

可以使用timestamp()fromtimestamp()方法进行时间戳与日期的转换。

代码演示:

from datetime import datetime

now = datetime.now()
timestamp = now.timestamp()
print("时间戳:", timestamp)

from_timestamp = datetime.fromtimestamp(timestamp)
print("从时间戳转换的日期:", from_timestamp)

输出:

时间戳: 1672444799.999999
从时间戳转换的日期: 2023-12-31 23:59:59.999999