当前位置:首页>python>五天入门Python,第二天:玩转数据结构和函数

五天入门Python,第二天:玩转数据结构和函数

  • 2026-09-08 09:59:15
五天入门Python,第二天:玩转数据结构和函数

嘿,朋友,又见面了!昨天我们打了地基,今天要开始搭房子的骨架了。如果你昨天认真敲了代码,现在应该已经能用Python做简单的输入输出和判断循环了。今天我们要接触一些真正让Python变得强大的东西:数据结构和函数。这些概念听起来有点唬人,但其实它们就是你身边常见的东西——比如购物清单、通讯录、菜谱。准备好了吗?我们开搞!


复习一下

还记得昨天我们怎么让程序跟你打招呼的吗?用变量存名字,用input获取输入,用if判断年龄。今天我们会在这些基础上,把数据组织得更优雅。比如,如果你要管理一个班级的学生成绩,用单独的变量 score1, score2... 会累死,这时候就需要列表出马了。


列表(List):能装东西的“购物车”

列表是Python里最常用的数据结构。你可以把它想象成一个超级购物车,什么都能往里放:数字、字符串,甚至其他列表。定义列表用方括号 [],元素之间用逗号隔开。

python

scores =[98,76,85,92,67]names =["小明","小红","小刚"]mixed =["hello",42,True,3.14]

访问列表元素

列表里的每个元素都有一个位置,叫索引。注意,Python的索引从0开始,所以第一个元素是 scores[0],第二个是 scores[1],以此类推。你也可以用负数索引,-1 表示最后一个,-2 表示倒数第二个。

python

print(scores[0])# 98print(names[-1])# "小刚"

切片(Slicing)

一次性拿多个元素?切片搞定。格式是 列表[开始:结束],注意结束位置不包含在内。

python

print(scores[1:3])# [76, 85]  (从索引1到2,不包括3)print(scores[:2])# [98, 76]  (从头到索引1)print(scores[3:])# [92, 67]  (从索引3到最后)

修改列表

列表是“可变的”,也就是说你可以随时增删改:

python

# 修改scores[2]=88# 把85改成88# 添加scores.append(100)# 在末尾加一个scores.insert(0,100)# 在索引0处插入100# 删除scores.remove(92)# 删除第一个值为92的元素popped = scores.pop()# 删除最后一个元素,并返回它del scores[0]# 删除索引0的元素

列表推导式(List Comprehension)

这是Python的特色语法,让你用一行代码生成列表。比如,要生成0到9的平方:

python

squares =[x**2for x inrange(10)]print(squares)# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

甚至可以加条件:[x**2 for x in range(10) if x % 2 == 0] 只取偶数的平方。酷不酷?


元组(Tuple):不可变的“固定套餐”

元组跟列表几乎一样,但它用圆括号 () 定义,而且不可变——一旦创建,就不能修改。这有点像快餐店的固定套餐,你不能把汉堡换成鸡翅。

python

colors =("red","green","blue")print(colors[0])# "red"# colors[0] = "yellow"   # 报错!元组不支持修改

那什么时候用元组?当你希望数据不会被意外修改时,比如坐标 (x, y),或者作为字典的键(列表不能做键,元组可以)。


字典(Dictionary):你的通讯录

字典是一种键值对的数据结构,就像通讯录:名字(键)对应电话号码(值)。用花括号 {} 定义,键和值用冒号分隔。

python

phonebook ={"小明":"13800138000","小红":"13912345678","老师":"110"}

访问和修改

通过键来访问值,就像查字典:

python

print(phonebook["小明"])# 13800138000phonebook["小明"]="10086"# 修改phonebook["小刚"]="120"# 添加新条目

如果你不确定键是否存在,可以用 get 方法,不存在时返回None或你指定的默认值:

python

print(phonebook.get("小刚"))# 120print(phonebook.get("校长","未知"))# 未知

遍历字典

经常需要把字典里的东西都拿出来看看:

python

for name in phonebook:print(name, phonebook[name])# 或者更优雅的 items() 方法for name, number in phonebook.items():print(name,"->", number)

还有 keys() 获取所有键,values() 获取所有值。


集合(Set):去重小能手

集合就像数学里的集合,元素无序且不重复。用花括号或 set() 函数创建。

python

fruits ={"apple","banana","orange","apple"}# 重复的apple会被自动去重print(fruits)# {'banana', 'orange', 'apple'}  (顺序可能不同)

集合最常用的就是去重和集合运算(交集、并集、差集):

python

a ={1,2,3,4}b ={3,4,5,6}print(a & b)# 交集 {3, 4}print(a | b)# 并集 {1, 2, 3, 4, 5, 6}print(a - b)# 差集 {1, 2}

函数(Function):把你的代码打包成“工具”

函数就是把一段代码打包起来,起个名字,以后想用的时候直接调用。避免重复写同样的代码。

定义函数

用 def 关键字:

python

defgreet(name):"""这是一个简单的打招呼函数"""print("Hello, "+ name +"!")

调用:greet("小明") 输出 Hello, 小明!

参数和返回值

函数可以接收参数,也可以返回值(用 return):

python

defadd(a, b):return a + bresult = add(3,5)print(result)# 8

参数类型

  • 位置参数:按顺序传参。

  • 默认参数:给参数一个默认值,调用时可以不传。

  • 关键字参数:调用时指定参数名,可以不按顺序。

  • 可变参数:接收任意多个参数,用 *args 和 **kwargs(后面再细说)。

python

defintroduce(name, age=18, city="北京"):print(f"我叫{name},今年{age}岁,来自{city}")introduce("小明")# 我叫小明,今年18岁,来自北京introduce("小红",20)# 我叫小红,今年20岁,来自北京introduce("小刚", city="上海")# 我叫小刚,今年18岁,来自上海

作用域

函数内部的变量是局部变量,外部无法访问。函数外部的变量是全局变量,函数内部可以读取,但修改要用 global 声明(不过一般不推荐随便改全局变量)。

python

x =10# 全局deffunc():    y =5# 局部print(x)# 可以读取全局# x = 20   # 这样会创建一个新的局部变量x,不会影响全局func()print(y)# 报错!y是局部变量,外部访问不到

模块(Module):Python的百宝箱

Python自带了很多现成的功能模块,就像工具箱。用 import 导入就能用。

比如随机数模块 random:

python

import randomprint(random.randint(1,10))# 生成1到10之间的随机整数

也可以只导入特定函数:from random import randint,这样就能直接用 randint() 了。

数学模块 math:

python

import mathprint(math.pi)# 3.141592653589793print(math.sqrt(16))# 4.0

自己写的 .py 文件也可以作为模块被别的文件导入,等以后项目大了就明白了。


综合小练习(烧脑时间)

来,写一个小程序,把今天学的东西串起来。需求如下:

  1. 有一个字典,存储学生姓名和分数:{"小明": 88, "小红": 95, "小刚": 67, "小丽": 82}

  2. 写一个函数,接收字典,返回平均分。

  3. 找出最高分的学生(可能有并列)。

  4. 打印所有及格(≥60)的学生名单。

  5. 用集合找出所有分数是否都在60以上(即是否有不及格)。

试试看,能不能自己写出来?卡住了可以看看提示:

python

scores ={"小明":88,"小红":95,"小刚":67,"小丽":82}defaverage(score_dict):    total =sum(score_dict.values())return total /len(score_dict)deffind_top(score_dict):    max_score =max(score_dict.values())    tops =[name for name, score in score_dict.items()if score == max_score]return topsdefpass_students(score_dict):    passed =[name for name, score in score_dict.items()if score >=60]return passeddefall_pass(score_dict):returnall(score >=60for score in score_dict.values())# all函数判断是否全部为Trueprint("平均分:", average(scores))print("最高分学生:", find_top(scores))print("及格学生:", pass_students(scores))print("全部及格?", all_pass(scores))

运行一下,看看结果。


第二天小结

今天信息量有点大,但都是以后天天用的东西。你学会了:

  • 列表(可变、有序、可重复)

  • 元组(不可变、有序)

  • 字典(键值对、高效查找)

  • 集合(无序、不重复、集合运算)

  • 函数(封装代码、参数、返回值、作用域)

  • 模块(导入和使用现成功能)

这些工具组合起来,你已经能处理很多实际问题了。明天我们将深入字符串处理、文件读写和异常处理——这些是让程序更健壮、更实用的技能。

记得,每敲一行代码,都要理解它为什么这么写。如果遇到报错,别慌,那是Python在跟你交流,告诉你哪里需要注意。多读报错信息,你会越来越懂它。


作业(选做)

  1. 写一个函数,接收一个列表,返回列表中的最大值和最小值(不能直接用 max 和 min)。

  2. 创建一个字典记录你身边5个朋友的生日,然后写一个程序,让用户输入名字,输出生日;如果名字不在字典里,提示“查无此人”。

  3. 用列表推导式生成一个包含1到20所有奇数的平方的列表。

明天见!继续加油!💪

最新文章

随机文章