007.列表list

拉清单是个好主意

先做些复习

改写Hello World变成函数

我们在001里学习了打印Hello World

# 程序007.001
print('Hello, World')

它是我们借助编程语言这种咒语向世界打招呼的一种方式

在002里我们学习了def来定义自己的函数,我们把这2课合在一起变成一个练习

问题:修改程序007.001,增加一个函数say_hello,参数为name,允许向任意名字的对象说hello,比如如果名字为蚂蚁老师,就打印 Hello, 蚂蚁老师

回答:使用在线游乐场或顺手的IDE编程并发送截图到微信群

上面的练习答案如下

# 程序007.002
def say_hello(name):
    print(f'Hello, {name}')
    
say_hello('蚂蚁老师')

让我们根据最近一次完成作业的情况,给积极性比较高的同学们打个招呼

可以这样写

# 程序007.003
student1 = 'lu'
student2 = '大白菜'
student3 = '木木'
student4 = '逻辑'
student5 = '逆行者'

say_hello(student1)
say_hello(student2)
say_hello(student3)
say_hello(student4)
say_hello(student5)

作为一个辛勤的法师,我们定义了5个字符串变量——这真是太繁琐了!

list来挽救你

我们可以用list来消除这种繁琐,先看看AI给出的解释

list的用法

# 程序007.004
students = ['lu', '大白菜', '木木', '逻辑', '逆行者']
print(students)

上面的代码定义了一个列表,列表里列出了积极完成作业的同学的名字,我们可以通过序号来获取列表里的成员

# 程序007.005
print(students[1]) # 大白菜
print(students[3]) # 逻辑

细心的同学会发现,序号为1的同学是大白菜,为什么不是lu呢?

因为Python的列表的序号从0开始,范围为0到列表长度-1

那么,如何知道列表的长度呢?我们可以调用Python提供的函数len,它传入一个列表,返回列表的长度

# 程序007.006
students_num = len(students)
print(students_num) # 5

所以上面定义的students列表长度为5

问题:根据目前所学的知识,大家思考下students列表的序号范围?如果要和 木木 同学打招呼,需要用序号几来找到她的名字?

回答:请在微信群发送答案

回答完课堂练习,让我们结合003课学习的for循环和range函数,打印积极完成作业同学列表

问题:使用for循环和range函数以及获取列表成员的操作students[i],来与每个积极完成作业的同学打招呼

回答:在微信群发送代码运行结果,知识不熟练的同学可以去复习第3课

遍历list

除了同学们在作业里使用range函数通过列表序号来遍历,list本身还有一个快捷的遍历方式

# 程序007.007
def say_hello(name):
    print('Hello, ', name)

students = ['lu', '大白菜', '木木', '逻辑', '逆行者']

for student in students:
    say_hello(student)

这种方式可以直接取出list里的元素,唯一的缺点是丢失了列表的序号,它和range通常在不同的场景里使用

list常见操作

# 程序007.008
# 增加同学A
a = '同学A'
students.append(a)
print(students)

# 找到同学A的序号/索引
idx = students.index(a)

# 修改同学A为同学B
students[idx] = '同学B'
print(students)

# 删除同学B
del students[idx]
print(students)

# 把同学A放在第一个
students.insert(0, a)
print(students)

# 查找木木同学,和没这个人同学是否在列表里
print('木木' in students)
print('没这个人' in students)

# 错误示例:当序号/索引超出列表长度-1时,会抛出错误
students[999]

# 复制一个列表方法1
print(students)
copy_students = list(students)
print(copy_students)
copy_students[0] = '神秘人'
print(copy_students, students)

# 复制一个列表方法2
print(students)
copy_students = students.copy()
print(copy_students)
copy_students[0] = '神秘人'
print(copy_students, students)

# 复制一个列表方法3
print(students)
copy_students = students[:]
print(copy_students)
copy_students[0] = '神秘人'
print(copy_students, students)

slice操作

在复制列表的方法3里,我们发现了一个新的概念[:],它其实是Python列表的一种特殊操作,我们让AI给解释一下

索引可以为正数,也可以为负数,负数代表倒着数。举例说明

# 程序007.009
students = ['lu', '大白菜', '木木', '逻辑', '逆行者']

# 返回列表序号为1和2的同学列表
print(students[1:3]) # step默认1

# 返回列表序号为1和3的同学列表
print(students[1:4:2])

# 返回最后一个同学的列表
print(students[-1:]) # 猜猜students[-1]返回什么?

# 返回倒序的列表
print(students[::-1]) # start默认-1,stop默认负的 len(students)+1
print(students[-1:-(len(students)+1):-1])

课后作业

使用程序007.009中的students列表,利用所学知识打印如下信息:

班长是XXX

小组一为[XXX, XXX, XXX, ...],组长是XXX

小组二位[XXX, XXX, XXX, ...],组长是XXX

满足条件:其中班长是students的第1位同学(序号为?),小组一为students里序号为奇数的同学,小组一组长是小组一的最后一位同学;小组二为students里序号为偶数的同学,小组二组长是小组二的第一位同学

Last updated