简单的数据结构就是列表了;
把数据放在一个列表里,需要的时候就取出来;
但有时候事情并不就是这么简单;
ls1 = ['a1', '0001', '张三', {'语文': 60}, {'数学': 70}, {'英语': 80}]
ls2 = ['a2', '0002', '李四', {'语文': 61}, {'数学': 71}, {'化学': 81}]
ls3 = ['a3', '0003', 'a3', {'语文': 61}, {'英语': 71}, {'化学': 81}]
我要把ls3中的字符a全部替换为b怎么办?
如果列表中的元素都是字符可以用下面的方法
ls = ['a3', '0003', 'a3']
ls = [x.replace('a', 'b') for x in ls]
print(ls)
输出:
['b3', '0003', 'b3']
但如果如ls3那样,里面含有其他类型的数据就会报错
这时候该怎么办呢?
python有高阶函数map,可以研究一下;
map函数我理解就是传入一个函数和列表参数,然后对用这个函数对列表中的每一个元素进行处理,之后返回处理的结果;
那么针对ls3,我这样来设计;
我只需要考虑针对一个元素的处理
def func(x):
# 判断数据类型
if type(x) is str:
return x.replace('a', 'b')
elif type(x) is dict:
return x
ls3 = list(map(func, ls3))
print(ls3)
输出:
['b3', '0003', 'b3', {'语文': 61}, {'英语': 71}, {'化学': 81}]
这么看map函数的实质就是通过传入处理函数,方便处理列表中每一个元素;
下面我想要获得列表中所有课程的信息,这似乎就简单了
首先我考虑通过列表切片先拿到总的课程信息,注意列表是前闭后开
class_all = ls3[3:]
print(class_all)
输出:
[{'语文': 61}, {'英语': 71}, {'化学': 81}]
然后再把信息逐一遍历出来
for class_info in class_all:
print(class_info)
# 打印字典键值对,也就是分别打印科目名称和成绩
for key, val in class_info.items():
print(key, val)
输出:
{'语文': 61}
语文 61
{'英语': 71}
英语 71
{'化学': 81}
化学 81
这里不得不说一下filter函数;
在某些情况下它能够做与map相同的工作;
但是二者又存在区别;
map是对列表中的每个元素进行加工并返回这个列表;
filter可以过滤掉满足条件的元素;
如果我要过滤掉列表中成绩低于70的项,应该怎么做呢?
def f(x):
if type(x) is dict:
# 取出字典第一个元素进行判断
if list(x.values())[0] > 70:
return x
print(list(filter(f, ls3)))
输出:
[{'英语': 71}, {'化学': 81}]
网友评论