java程序员怎么从Python小白变成Python大拿?(二)

文章2:深入理解Python的数据结构

目标

掌握Python中常用的数据结构及其操作,包括列表解析式、字典的操作与优化、集合的特性和用途,以及元组的不变性及其应用场景。


一、列表解析式(List Comprehensions)

1. 基本语法

列表解析式通过一行代码生成列表,语法结构为:

csharp 复制代码
[expression for item in iterable if condition]
  • expression:生成列表元素的表达式。
  • item:从可迭代对象(如列表、字符串等)中逐个取出的元素。
  • iterable:被遍历的可迭代对象。
  • condition(可选):过滤条件,只有满足条件的元素会被保留。

2. 示例

  • 生成平方数列表
ini 复制代码
squares = [x ** 2 for x in range(10)]  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  • 过滤偶数
ini 复制代码
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]  # [0, 16, 36, 64]
  • 嵌套循环(生成乘法表):
scss 复制代码
multiplication_table = [[x * y for y in range(1, 5)] for x in range(1, 5)]
# [[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12], [4, 8, 12, 16]]
  • 处理复杂对象(从字典列表中提取符合条件的值):
css 复制代码
people = [    {"name": "Alice", "age": 25},    {"name": "Bob", "age": 35},    {"name": "Charlie", "age": 30},    {"name": "David", "age": 40}]
names = [p["name"] for p in people if p["age"] > 30]  # ["Bob", "David"]

3. 练习

编写一个列表解析式,生成包含1到5的立方值的列表。

ini 复制代码
cubes = [x ** 3 for x in range(1, 6)]  # [1, 8, 27, 64, 125]

二、字典(Dictionary)的操作和优化

1. 基本操作

  • 添加/更新键值对
ini 复制代码
my_dict = {"apple": 1, "banana": 2}
my_dict["cherry"] = 3          # 添加新键值对
my_dict["apple"] = 10          # 更新现有键值对
  • 删除键值对
ini 复制代码
del my_dict["banana"]          # 删除指定键
popped_value = my_dict.pop("cherry")  # 移除并返回值
  • 遍历字典
python 复制代码
for key, value in my_dict.items():
    print(f"Key: {key}, Value: {value}")

2. 优化技巧

  • 安全访问 :使用​get()​方法避免​KeyError​
ini 复制代码
value = my_dict.get("orange", "Not Found")  # 默认返回"Not Found"而非报错
  • 字典推导式(快速生成字典):
arduino 复制代码
# 统计单词出现次数
words = ["apple", "banana", "apple", "cherry"]
word_count = {word: words.count(word) for word in words}
# {"apple": 2, "banana": 1, "cherry": 1}

3. 练习

给定一个单词列表,创建一个字典记录每个单词的出现次数。

ini 复制代码
words = ["apple", "banana", "apple", "cherry", "banana"]
word_count = {}
for word in words:
    word_count[word] = word_count.get(word, 0) + 1
# 或使用推导式:
word_count = {word: words.count(word) for word in set(words)}

三、集合(Set)的特性和用途

1. 核心特性

  • 无序:元素不按固定顺序存储。
  • 唯一性:集合中的元素不可重复。
  • 数学运算:支持交集、并集、差集等操作。

2. 常用操作

  • 创建集合
ini 复制代码
fruits_set = {"apple", "banana", "cherry"}
  • 添加/删除元素
csharp 复制代码
fruits_set.add("orange")       # 添加元素
fruits_set.remove("banana")    # 删除元素
  • 集合运算
ini 复制代码
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
union = set1 | set2            # 并集:{1, 2, 3, 4, 5, 6}
intersection = set1 & set2     # 交集:{3, 4}
difference = set1 - set2       # 差集:{1, 2}

3. 练习

找出两个列表中共有的元素并以集合形式展示。

ini 复制代码
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common_elements = set(list1) & set(list2)  # {4, 5}

四、元组(Tuple)的不变性及其应用场景

1. 不变性(Immutable)

  • 元组一旦创建,其元素不能被修改、添加或删除。
  • 访问速度比列表快,内存占用更少。

2. 应用场景

  • 数据安全性:确保数据不被意外修改(如坐标、日期)。
  • 字典键:由于元组不可变,可作为字典的键。
  • 函数返回多个值:元组天然支持多值返回。

3. 示例

  • 定义和访问
ini 复制代码
coordinates = (10.0, 20.0)
print(coordinates[0])  # 10.0
  • 作为字典键
ini 复制代码
location = {(37.7749, -122.4194): "San Francisco"}
  • 返回多个值
ruby 复制代码
def get_coordinates():
    return (34.0522, -118.2437)  # 返回洛杉矶坐标
lat, lon = get_coordinates()

4. 练习

创建一个表示一周七天的元组,并访问"星期三"。

ini 复制代码
days = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
print(days[2])  # 输出:"Wednesday"

总结

通过掌握这些数据结构,你可以高效处理各种编程任务:

  • 列表解析式:用简洁的代码生成复杂列表。
  • 字典:快速查找和映射数据。
  • 集合:去重和数学运算的利器。
  • 元组:确保数据安全性和高效访问。

继续实践这些数据结构,你将能够编写更简洁、高效的Python代码!

相关推荐
你的人类朋友1 小时前
【Node】认识一下Node.js 中的 VM 模块
前端·后端·node.js
光军oi2 小时前
全栈开发杂谈————关于websocket若干问题的大讨论
java·websocket·apache
weixin_419658312 小时前
Spring 的统一功能
java·后端·spring
小许学java3 小时前
Spring AI-流式编程
java·后端·spring·sse·spring ai
canonical_entropy3 小时前
对《DDD本质论》一文的解读
后端·架构·领域驱动设计
码事漫谈3 小时前
我用亲身经历告诉你,为什么程序员千万别不把英语当回事
后端
码事漫谈3 小时前
C++ const 用法全面总结与深度解析
后端
haogexiaole3 小时前
Java高并发常见架构、处理方式、api调优
java·开发语言·架构
间彧3 小时前
分布式单例模式在微服务架构中的实际应用案例
后端
间彧3 小时前
分布式系统中保证单例唯一性的Java解决方案
后端