文章目录
- 1.map函数(元素处理函数)
-
- 2reduce函数(迭代运算函数)
- 3.filter函数(过滤器函数)
- 4.sorted函数
- 5.作业
- 1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']
- 2.利用map函数和lambda表达式,实现[‘1’,’2’,’3’]变成[1,2,3]
- 3.尽可能少的代码实现删除列表中重复的值 ? 例如:[1, 1, 1, 23, 3, 4, 4]
- 4.将两个列表合并成为指定形式。例如:
- 5.请按照列表中元素的age由大到小排序
- 6.编写一个函数,传入一个字符串元素的列表。返回根据字符串长度排序的列表。(使用2种sort的方式分别实现)
1.map函数(元素处理函数)

l1 = ["1","2","3","4"]
res = []
for i in l1:
res.append(int(i))
print(res)
res = map(int,l1)
print(res,type(res))
for item in res:
print(item)
print(list(res))
output:
<map object at 0x000001A547622EF0> <class ‘map’> 1 2 3 4
1.1自定义函数
l1 = ["1","2","3","4"]
def getSquare(x):
return int(x)**2
res = map(getSquare,l1)
print("自定义函数:",list(res))
l1 = ["1","2","3","4"]
res = map(lambda x:int(x)**2,l1)
print("lambda表达式:",list(res))
1.2多个可迭代对象,作为参数
l1=[1,2,3,4]
l2=[5,5,7,8]
res=map(lambda x,y:x+y,l1,l2)
print(list(res))
应用案例
将下面的字典进行键值对互换: dic = {“北京”:“京”,“上海”:“沪”,“广东”:“粤”,“四川”:“川”}
dic = {"北京":"京","上海":"沪","广东":"粤","四川":"川"}
res={}
for a,b in dic.items()
res[b]=a
print(res)
dic = {"北京":"京","上海":"沪","广东":"粤","四川":"川"}
def change(item):
return (item[1],item[0])
res=map(change,dit.items())
res=map(lambda item:(item[1],item[0]),dict.items())
print(dict(res))
1.3dict也可以在其他容器对象上
a = [(1,2),(3,4),(5,6)]
a = ((1,2),(3,4),(5,6))
a = {(1,2),(3,4),(5,6)}
b = dict(a)
print("字典对象:",b)
2reduce函数(迭代运算函数)
语法: reduce(function, sequence[, initial]) -> value #value是指返回值

from functools import reduce
obj=[1,2,3,4,5]
def multi(x,y):
return x*y
res=reduce(multi,obj)
print(res,type(res))

def getres(X):
if x==1:
return 1
return getres(x-1)*x+1
print(getres(4))
使用reduce函数实现
from functools import reduce
lst = [1,2,3,4]
res = reduce(lambda x,y:x*y+1,lst)
res = reduce(lambda x,y:x*y+1,range(1,5))
print(res)
res = reduce(lambda x,y:x+y,range(1,5),100)
print(res)
3.filter函数(过滤器函数)
语法:filter(func,iterable) -> iterator

lst=[1,2,3,4,21,32,43,54]
def getEven(x):
if x%2==0:
return True
else:
return False
res=filter(lambda x:True if x%2==0 else False,lst)
print(list(res))
4.sorted函数
sorted(iterable,reverse=False,key=函数) -> Iterator
#key表示排序的方法

lst = [1,3,2,5,8,-2]
print(sorted(lst))
lst = "dfackj"
print(sorted(lst))
输出:
[-2, 1, 2, 3, 5, 8] [‘a’, ‘c’, ‘d’, ‘f’, ‘j’, ‘k’]
按照绝对值进行排序
lst = [1,3,2,5,8,-2]
print(sorted(lst,reverse=False,key=abs))
输出
[1,-2,2,3,5,8]
dic={3:"A",2:"C",-1:"B"}
print(sorted(dic))
lst=[20,31,47,19,15]
def getRemainder(x):
return x%3
res=sorted(lst,key=getRemainder())
res=sorted(lst,key=lambda x:x%3)
print(res)
sort()和sorted的区别
lst=[1,3,2,5,8,-2]
print("排序前:",lst)
lst.sort()
print("排序后:",lst)
lst=[1,3,2,5,8,-2]
print("排序前",lst)
lst2=sorted(lst)
print("新列表:",lst2)
print("sorted排序后:",lst)

5.作业
1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]
def namecapitalize(name):
name=name[0].upper()+name[1:].lower()
return name
ls=['adam', 'LISA', 'barT']
res=map(namecapitalize, ls)
print(list(res))
res=map(lambda name:name[0].upper()+name[1:].lower(),ls)
print(list(res))

2.利用map函数和lambda表达式,实现[‘1’,’2’,’3’]变成[1,2,3]
ls=['1','2','3']
res=map(lambda x:int(x), ls)
print(list(res))

3.尽可能少的代码实现删除列表中重复的值 ? 例如:[1, 1, 1, 23, 3, 4, 4]
ls=[1, 1, 1, 23, 3, 4, 4]
print(list(set(ls)))

4.将两个列表合并成为指定形式。例如:
[1,3,5,7,9],[2,4,6,8,10] 合并为:[[1,2],[3,4],[5,6],[7,8],[9,10]]
试试你能想到几种方法呢?
ls1=[1,3,5,7,9]
ls2=[2,4,6,8,10]
def add(x,y):
return [x,y]
res=map(add,ls1,ls2)
print(list(res))

5.请按照列表中元素的age由大到小排序
list1 = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
list1 = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
res=sorted(list1,reverse=False,key=lambda x:x['age'])
print(res)

6.编写一个函数,传入一个字符串元素的列表。返回根据字符串长度排序的列表。(使用2种sort的方式分别实现)
例如:lst = [“aa”,“bbbb”,“ccc”,“d”]
输出:[“d”,“aa”,“ccc”,“bbbb”]**
lst = ["aa","bbbb","ccc","d"]
res=sorted(lst,reverse=False,key=lambda x:len(x))
print(res)
lst = ["aa","bbbb","ccc","d"]
lst.sort(reverse=False,key=lambda x:len(x))
print(lst)

|