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代码!

相关推荐
Asu520218 分钟前
思途spring学习0807
java·开发语言·spring boot·学习
遇见火星24 分钟前
Jenkins全链路教程——Jenkins用户权限矩阵配置
java·矩阵·jenkins
埃泽漫笔30 分钟前
什么是SpringBoot
java·spring boot
zhang10620936 分钟前
PDF注释的加载和保存的实现
java·开发语言·pdf·pdfbox·批注
码银1 小时前
什么是逻辑外键?我们要怎么实现逻辑外键?
java·数据库·spring boot
SugarFreeOixi1 小时前
Idea打包可执行jar,MANIFEST.MF文件没有Main-Class属性:找不到或无法加载主类
java·jar
Mr Aokey1 小时前
从BaseMapper到LambdaWrapper:MyBatis-Plus的封神之路
java·eclipse·mybatis
我是不会赢的1 小时前
使用 decimal 包解决 go float 浮点数运算失真
开发语言·后端·golang·浮点数
小白学大数据1 小时前
Java爬虫性能优化:多线程抓取JSP动态数据实践
java·大数据·爬虫·性能优化