当前位置:首页>python>从0开始学Python(2)

从0开始学Python(2)

  • 2026-09-02 16:16:25
从0开始学Python(2)
我们继续第二课。今天只学一个核心概念:列表list。它非常重要,因为科研数据里你经常不是处理“一个人的年龄”,而是处理“一组人的年龄”。
假设我们有 5 名被试:
age1=21
age2=23
age3=25
age4=22
age5=24
这样写当然可以,但如果有 100 个被试,就会非常麻烦。Python 提供了一个东西,可以把多个数据装在一起:
ages= [21, 23, 25, 22, 24]
这里的:
[]
就是列表最明显的标志。
你可以把列表理解成一个盒子,里面按照顺序放了很多东西:
ages
↓
[21, 23, 25, 22, 24]

第二课:列表 list

先运行:
ages= [21, 23, 25, 22, 24]
print(ages)
结果:
[21, 23, 25, 22, 24]
也就是说,整个列表本身也是一个变量。
以前我们写:
age=21
现在变成:
ages= [21, 23, 25, 22, 24]
注意我故意用了:
age
ages
age 表示一个年龄。
ages 表示多个年龄。
这不是 Python 强制要求,只是一种非常好的命名习惯。

1. 列表里面不仅能放数字

可以放文字:
names= ["张三", "李四", "王五"]
输出:
print(names)
结果:
['张三', '李四', '王五']
也可以存分组:
groups= ["患者组", "患者组", "对照组", "对照组"]
甚至可以:
subjects= ["sub-001", "sub-002", "sub-003"]
数据处理中,这种东西会特别常见。

2. 如何取出列表中的某一个数据?

例如:
ages= [21, 23, 25, 22, 24]
我们想取第一个年龄。
你可能自然会写:
ages[1]
但这是错误的理解。
Python 中一个非常重要的规则是:

Python 从 0 开始数。

因此:
数据:    21    23    25    22    24
位置:     0     1     2     3     4
所以:
print(ages[0])
得到:
21
而:
print(ages[1])
得到:
23
再比如:
print(ages[2])
得到:
25
这个位置在编程里叫:
索引 index
现在不必死记术语,你只需要记:
ages[0]
就是取第一个。

3. 为什么一定从0开始?

你现在不用深入理解底层原理,只需要形成习惯:
人类说:第1个
Python说:0
人类说:第2个
Python说:1
人类说:第3个
Python说:2
以后看到:
data[0]
脑子里自动翻译成:

第一个数据。

这是学习 Python 非常关键的一关。

4. 最后一个数据怎么取?

例如:
ages= [21, 23, 25, 22, 24]
最后一个是:
ages[4]
但如果列表有 1000 个数字,你不可能每次都数。
Python 有一个很方便的写法:
ages[-1]
表示:

最后一个。

所以:
print(ages[-1])
结果:
24
同理:
ages[-2]
就是倒数第二个:
22
可以这样理解:
正着数:
0    1    2    3    4
↓    ↓    ↓    ↓    ↓
21   23   25   22   24
倒着数:
-5   -4   -3   -2   -1
↓    ↓    ↓    ↓    ↓
21   23   25   22   24

5. 修改列表里面的数据

比如:
ages= [21, 23, 25, 22, 24]
发现第三个被试不是25岁,而是26岁。
因为第三个数据对应索引2:
ages[2] =26
再打印:
print(ages)
得到:
[21, 23, 26, 22, 24]
这个思想其实和之前:
x=10
x=20
是一样的。
只不过这里修改的是列表中的某一个位置。

6. 给列表增加数据

假设:
subjects= ["sub-001", "sub-002", "sub-003"]
现在新增一个被试:
sub-004
可以:
subjects.append("sub-004")
然后:
print(subjects)
得到:
['sub-001', 'sub-002', 'sub-003', 'sub-004']
这里:
append()
就是:

在列表最后增加一个东西。

这一点非常重要。
例如你以后写数据处理程序:
error_subjects= []
这是一个空列表。
程序发现哪个被试有问题,就:
error_subjects.append("sub-003")
发现另一个:
error_subjects.append("sub-017")
最后:
print(error_subjects)
可能得到:
['sub-003', 'sub-017']
这就是自动记录异常被试的基本原理。

7. 什么是空列表?

就是:
data= []
里面什么都没有。
这看起来没什么用,但实际编程里非常常见。
例如:
bmi_results= []
以后算出来一个 BMI:
bmi_results.append(21.5)
再算一个:
bmi_results.append(24.8)
再算一个:
bmi_results.append(20.3)
最后:
print(bmi_results)
得到:
[21.5, 24.8, 20.3]
所以你可以把:
[]
理解成:

先准备一个空盒子,后面慢慢往里面装东西。

8. 一个列表有多少个数据?

使用:
len()
例如:
ages= [21, 23, 25, 22, 24]
print(len(ages))
结果:
5
所以:
len()
可以理解成:

看里面有几个东西。

例如:
subjects= ["sub-001", "sub-002", "sub-003"]
print(len(subjects))
结果:
3
这在科研数据处理中非常常见。
比如以后你可能写:
print("总被试数:", len(subjects))
输出:
总被试数: 30

9. 删除列表中的数据

假设:
subjects= ["sub-001", "sub-002", "sub-003", "sub-004"]
要删除:
sub-003
可以写:
subjects.remove("sub-003")
然后:
print(subjects)
结果:
['sub-001', 'sub-002', 'sub-004']
也可以按照位置删除:
delsubjects[1]
表示删除第二个。

10. 切片:一次拿多个数据

这是列表中非常重要的东西。
假设:
ages= [21, 23, 25, 22, 24]
如果我们想取:
21
23
25
也就是前三个。
写:
ages[0:3]
结果:
[21, 23, 25]
这里很容易困惑:
0:3
为什么结果没有索引3?
因为 Python 的规则是:

包括左边,不包括右边。

所以:
ages[0:3]
表示:
取 0
取 1
取 2
到3停止
因此得到:
[21, 23, 25]
你也可以写:
ages[:3]
意思完全一样:
从开头取到索引3之前
结果:
[21, 23, 25]

11. 从某个位置一直取到最后

例如:
ages[2:]
表示:

从索引2开始,一直到最后。

结果:
[25, 22, 24]
所以以后看到:
data[:10]
可以理解成:

前10个。

而:
data[-10:]
就是:

最后10个。

这个以后查看大数据的时候极其常用。

12. 列表可以做一些简单统计

例如:
scores= [80, 90, 75, 88, 92]
求和:
print(sum(scores))
得到:
425
求数量:
print(len(scores))
得到:
5
于是均值可以自己算:
mean_score=sum(scores) /len(scores)
print(mean_score)
得到:
85.0
你其实已经开始做描述性统计了。

13. 最大值和最小值

scores= [80, 90, 75, 88, 92]
最大值:
max(scores)
结果:
92
最小值:
min(scores)
结果:
75
所以可以写:
print("平均分:", sum(scores) /len(scores))
print("最高分:", max(scores))
print("最低分:", min(scores))
输出:
平均分: 85.0
最高分: 92
最低分: 75
已经很像一个简单的数据分析脚本了。

14. 一个科研风格的小例子

现在假设有5名被试的年龄:
ages= [65, 72, 58, 61, 69]
我们希望得到:
样本量
平均年龄
最小年龄
最大年龄
代码:
ages= [65, 72, 58, 61, 69]
n=len(ages)
mean_age=sum(ages) /n
min_age=min(ages)
max_age=max(ages)
print("样本量:", n)
print("平均年龄:", round(mean_age, 2))
print("最小年龄:", min_age)
print("最大年龄:", max_age)
结果:
样本量: 5
平均年龄: 65.0
最小年龄: 58
最大年龄: 72
你现在已经可以读懂这一整段代码了。

15. 两组数据怎么表示?

比如患者组年龄:
patient_age= [65, 72, 68, 70, 62]
对照组:
control_age= [63, 69, 66, 71, 64]
分别算平均值:
patient_mean=sum(patient_age) /len(patient_age)
control_mean=sum(control_age) /len(control_age)
print("患者组平均年龄:", patient_mean)
print("对照组平均年龄:", control_mean)
这已经开始接近真实科研代码了。
以后我们用 pandas 后,不会这么手工计算,但这个阶段理解原理非常重要。

16. 一个特别容易出现的错误

看看:
ages= [21, 23, 25]
如果写:
ages[3]
会报错:
IndexError: list index out of range
原因是列表虽然有3个数据,但索引只有:
0
1
2
没有:
3
所以以后看到:
IndexError
第一反应应该是:

我是不是取了一个根本不存在的位置?

17. 再认识一下 type()

Python 可以告诉你一个变量是什么类型。
例如:
age=25
print(type(age))
可能得到:<class 'int'>
表示整数。
再看:
name="张三"
print(type(name))
得到:<class 'str'>
字符串。
列表:
ages= [21, 23, 25]
print(type(ages))
得到:<class 'list'>
所以:
int     整数
str     文字
list    列表
先认识它们即可。

18. 为什么列表如此重要?

因为现实中的数据往往都是:
一个人 → 一个值
很多人 → 一列值
比如:
ages= [65, 72, 58, 61]
可以理解为 Excel 中的一列:
年龄
65
72
58
61
而:
groups= ["患者", "患者", "对照", "对照"]
就是另一列:
分组
患者
患者
对照
对照
所以你现在已经开始从“变量”进入“数据集”的思维方式了。

今天最需要记住的内容

你不用把所有命令背下来,主要掌握这些:

#创建列表

ages= [21, 23, 25]

#第一个

ages[0]

#最后一个

ages[-1]

#前两个

ages[:2]

#数量

len(ages)

#添加

ages.append(30)

#删除

ages.remove(23)

#求和

sum(ages)

#最大值

max(ages)

#最小值

min(ages)
其中最重要的是:
[]
代表列表,以及:

Python从0开始计数。

第二课练习

你可以直接复制下面这段,但建议先自己猜结果,再运行:
scores= [78, 85, 92, 66, 88]
print("全部成绩:", scores)
print("第一个人的成绩:", scores[0])
print("最后一个人的成绩:", scores[-1])
print("被试人数:", len(scores))
print("平均成绩:", sum(scores) /len(scores))
print("最高成绩:", max(scores))
print("最低成绩:", min(scores))
然后再自己加一个被试:
scores.append(95)
看看:
print(scores)
变成什么。
下一课我们就进入 Python 第一个真正有“编程感”的东西:for循环。
学完 for 以后,你就可以让电脑从:
sub-001
sub-002
sub-003
……
sub-100
一个一个自动处理,而不是自己重复写100遍代码。这个概念也正是以后批量整理 MRI、EEG、Excel 和行为数据的基础。

最新文章

随机文章