当前位置:首页 > 技术 > 正文内容

Python 核心数据结构操作指南:列表、字典、字符串与元组

访客 技术 2026年9月10日 9

一、可变序列:列表 (List)

列表是 Python 中最常用的有序集合类型,使用方括号 [] 定义。元素之间用逗号分隔,支持异构数据类型。列表具有索引特性,正向索引从 0 开始,负向索引从 -1 开始表示末尾元素。

1. 增删改查与扩展

# 初始化一个人员数据列表
employees = ["Alice", "Bob", "Charlie"]

# 【修改】直接通过下标赋值,若下标超出范围则报错
employees[1] = "Bobby"

# 【插入】insert(索引,对象)
employees.insert(0, "David")

# 【追加】append(对象),添加到列表末尾
employees.append("Eve")

# 【删除】del 语句可删除指定下标或整个变量
del employees[0]

# pop(索引) 默认移除最后一个元素并返回
removed_name = employees.pop()

# remove(值) 移除第一个匹配到的特定值
if "Charlie" in employees:
    employees.remove("Charlie")

2. 统计与定位

# count(值) 计算指定元素出现的次数
print(employees.count("Alice"))

# index(值) 返回首次出现位置的下标,不存在则抛出异常
try:
    idx = employees.index("Frank")
except ValueError:
    print("目标元素未找到")

3. 排序与翻转

注意:sort() 方法直接在原列表上进行操作并返回 None,不适合链式调用。

numbers = [3, 1, 4, 1, 5]

# 原地升序排序
numbers.sort()
# 翻转顺序
numbers.reverse()
print(numbers)

4. 合并与复制机制

# extend() 将另一个列表的元素批量添加进当前列表
base_list = ["X", "Y"]
extra_list = ["A", "B"]
base_list.extend(extra_list)

# 浅拷贝 (Shallow Copy)
# 仅复制第一层对象,嵌套的对象仍共享内存地址
main_data = ["Item1", ["SubItem1", "SubItem2"]]
copy_v1 = main_data.copy()

# 修改主列表的顶层元素,拷贝不受影响
main_data[0] = "ModifiedTop"

# 修改主列表中的嵌套列表,拷贝也会同步变化
main_data[1][0] = "ChangedSubItem"
print(f"Main: {main_data}")
print(f"Copy: {copy_v1}") # SubItem1 也会变

# 深拷贝 (Deep Copy)
# import copy 
# safe_copy = copy.deepcopy(main_data)
# 无论修改哪一层,源数据与拷贝数据互不干扰

二、不可变序列:字符串 (String)

字符串是不可变的数据类型,一旦创建不能更改其内容,任何操作都会生成新字符串。

1. 格式化处理

raw_text = "hello world"

# title() 首字母大写
capitalized = raw_text.title() 
print(capitalized)  # Hello World

# replace() 替换特定子串
replaced = raw_text.replace("hello", "Hi")

2. 验证与辅助功能

# 判断是否为纯数字
is_num = "12345".isdigit() 

# 判断是否符合标识符命名规范 (如变量名)
valid_id = "my_var_1".isidentifier()
invalid_id = "my-var-1".isidentifier()

# 填充居中
text = "Core"
padded = text.center(10, "*")
print(padded) # ***Core****

三、哈希映射:字典 (Dictionary)

字典用于存储键值对 (Key-Value),键必须是唯一的且不可变(通常是字符串或元组),字典本身是无序的(在 Python 3.7+ 中按插入顺序保持)。

1. 基本操作

user_db = {
    "ID001": "Admin",
    "ID002": "Guest"
}

# 设置或更新 (若 Key 存在则覆盖,不存在则新增)
user_db["ID003"] = "User" 

# 安全获取值,不存在时返回 None 或指定默认值
val = user_db.get("ID001", "DefaultUser")

# 检查 Key 是否存在
has_key = "ID001" in user_db

2. 遍历与销毁

# 通过 pop 删除指定键并返回对应值
removed = user_db.pop("ID002")

# 循环迭代
for k, v in user_db.items():
    print(f"Key: {k}, Value: {v}")

# 获取所有键或值的视图
all_keys = list(user_db.keys())
all_values = list(user_db.values())

3. 嵌套结构

字典可以嵌套包含列表或其他字典,实现复杂数据结构。

address_book = {
    "Beijing": {"District1": ["StreetA", "StreetB"]},
    "Shanghai": {"District1": ["RoadX", "RoadY"]}
}

# 直接链式访问修改嵌套数据
address_book["Beijing"]["District1"][0] = "NewStreet"

四、不可变序列:元组 (Tuple)

元组使用圆括号 () 定义,类似列表但内容不可修改。常用于确保数据安全或不希望被意外更改的上下文。

coordinates = (10, 20)
# coordinates[0] = 15  # 此行会抛出 TypeError

五、性能优化与编译机制

Python 作为解释型语言,在运行代码前通常由解释器将其转换为字节码。.pyc 文件即为编译后的缓存版本,存放于 __pycache__ 目录中。再次运行相同脚本时,如果源码未变更,解释器可直接加载 .pyc 以提升执行效率。开发者可利用此机制优化启动速度,但在动态热更新场景下需注意清除旧缓存。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。