当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
匿名函数的关键字为 lambda
冒号前面是 形参 冒号后面是返回值
from functools import reduce
def add(x, y):
return x + y
print(reduce(add, range(10)))
===========用匿名函数=============
print(reduce(lambda x, y: x + y, range(10)))
def mypow(x):
return x ** 2
print(list(map(lambda x: x ** 2, range(5))))
def isood(num):
return num % 2 == 0
print(list(filter(lambda x: x % 2 == 0, range(100))))
45
45
[0, 1, 4, 9, 16]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
—————练习—————
#(2018-携程-春招题)题目需求:
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0 =2
7 =1
0 =2
2 =1
输出:
调整后数组的内容;
7
2
0
0
方法一:
n=int(input('输入数组长度:'))
s=[]
for i in range(n):
s.append(int(input()))
for j in range(n):
if s[j]==0:
for i in range(j,n-1):
t=s[i]
s[i]=s[i+1]
s[i+1]=t
print(s)
方法二:
注意:定义的函数应该在调用前,要不会报错
def move_zore(item):
if item == 0:
return 2
else:
return 1
n = int(input())
li = [int(input()) for i in range(n)]
for i in sorted(li,key=move_zore):
print(i)
————练习————-
有一个整数列表(10个元素),要求调整元素的顺序把奇数放在前面 偶数放在后面
方法一:
import random
def sirqq(x):
if x % 2 == 0:
return 2
else:
return 1
s = [random.randint(1, 10) for i in range(10)]
print(sorted(s, key= sirqq))
方法二:
import random
s = [random.randint(1,10) for i in range(10)]
print(sorted(s,key=lambda x:2 if x%2 == 0 else 1))