lambda x: 3*x+1
怎么用它呢 , 来给它一个名字
g = lambda x:3*x+1
调用一下它
g(2)
如果想有多个input怎么办?
比如说想把 first name 和 last name 合起来 ?
full_name = lambda fn,ln: fn.strip().title()? + ” ” +ln.srip().title()? ? ? ? ? ? ? ? ? ? ?.title()的功能是首字母大写
来调用一下? !? full_name(“? ?leo”,”adriea “)
那key又是怎么肥事儿?
当待排序列表的元素由多字段构成时,我们可以通过sorted(iterable,key,reverse)的参数key来制定我们根据那个字段对列表元素进行排序。
key=lambda 元素: 元素[字段索引]
例如:想对元素第二个字段排序,则
key=lambda y: y[1]
备注:这里y可以是
任意
字母,等同key=lambda x: x[1]
看几个简单的例子。
listA = [3, 6, 1, 0, 10, 8, 9]
print(sorted(listA))
listB = [‘g’, ‘e’, ‘t’, ‘b’, ‘a’]
print(sorted(listB))
print(sorted(listB, key=lambda y: y[0]))
listC = [(‘e’, 4), (‘o’, 2), (‘!’, 5), (‘v’, 3), (‘l’, 1)]
print(sorted(listC, key=lambda x: x[1]))
结果
#结果一
[0, 1, 3, 6, 8, 9, 10]
#结果二
[‘a’, ‘b’, ‘e’, ‘g’, ‘t’]
[‘a’, ‘b’, ‘e’, ‘g’, ‘t’]
#结果三
[(‘l’, 1), (‘o’, 2), (‘v’, 3), (‘e’, 4), (‘!’, 5)]
那最后有个-1 又是什么意思?
turn out 只是读的时候的问题:
Python has the ability to index from the
end
of a list. Hence,
x[-1]
refers to the last element,
x[-2]
refers to the second to last element, etc.
a.sort(key=lambda x: x[-1])
>>> a = [(10, 4), (3, 5), (7, 1)]
>>> a.sort(key=lambda x: x[-1])
[(7, 1), (10, 4), (3, 5)]
按如果是键值对怎么办
d= {‘a’:24,’g’:52,’i’:12,’k’:33}
# 以列表形式输出字典d的key
# d.items()为字典d的键值对
b1=[key for key,value in d.items()]
print(b1)
# 以列表的形式输出字典d的value
b2={value for key,value in d.items()}
print(b2)
# 颠倒字典d的key:value位置
b3={value : key for key,value in d.items()}
print(b3)
# 将字典d按value的值进行排序
b4=sorted(d.items(), key=lambda x: x[1])
print(b4)
[‘a’, ‘i’, ‘k’, ‘g’]
set([24, 33, 12, 52])
{24: ‘a’, 33: ‘k’, 12: ‘i’, 52: ‘g’}
[(‘i’, 12), (‘a’, 24), (‘k’, 33), (‘g’, 52)]
[Finished in 0.0s]
sorted(d.items(), key=lambda x: x[1]) 中?d.items() 为待排序的对象;key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。 key=lambda??变量:变量[维数] 。维数可以按照自己的需要进行设置。
不想写纬度的话,这是键值对,当然可以用名字来代替拉 :
# 将列表中的age由大到小排序
alist = [{‘name’:’a’,’age’:20},{‘name’:’b’,’age’:30},{‘name’:’c’,’age’:25}]
b=sorted(alist,key=lambda x:x[‘age’],reverse=True)
print(b)
[{‘age’: 30, ‘name’: ‘b’}, {‘age’: 25, ‘name’: ‘c’}, {‘age’: 20, ‘name’: ‘a’}]
lambda函数能不能内置在其他函数里面呢?
当然~
顺带也提一下map函数怎么用:(map跟lambda函数相反,前面放函数,后面放元素,只有map是反的)
对于min ,max函数是先元素,后函数–>tmin = min(l,key = lambda x:x[0])
map函数举例:
对于一个输入来说:
3
10 2
n = int(input())
T,C = map(int,input().split())
>>>def square(x) : # 计算平方数
… return x ** 2
…
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
最后,对于排序那里,要补充一下 :
对tuple 或者是 二维list 进行排序,先按照第一个元素升序,如果第一个元素相同,再按照第二个元素降序排列。
L = [(12, 12), (34, 13), (32, 15), (12, 24), (32, 64), (32, 11)]
L.sort(key=lambda x: (x[0], -x[1]))
print(L)
或者
L = [[12, 12], [34, 13], [32, 15], [12, 24], [32, 64], [32, 11]]
L.sort(key=lambda x: (x[0], -x[1]))
print(L)
答案都是
[[12, 24], [12, 12], [32, 64], [32, 15], [32, 11], [34, 13]]
[Finished in 0.1s]
而:
L = [[34, 13], [32, 15], [12, 24],[12, 12],[32, 64], [32, 11]]
x = min(L,key=lambda x: x[0])
print(x)
结果是:?[12, 24]? ?而不是 [12,12] 所以说 双层的list排序用的是内层的[]的下标对应的数字作为对比的对象,而当只比一个的时候,不考虑比第二个纬度的话,[12,24]反而是出现的第一个最小的, 这个时候输出是[12,24] 而不是[12,12]
在后面在加一个【】
x = min(L,key=lambda x: x[0])[0]
输出就是 12 了 ,
对于map函数: python map函数感觉比较不一样:
他的定义是这样的:
map函数的原型是map(function, iterable, …),它的返回结果是一个列表。
参数function传的是一个函数名,可以是python内置的,也可以是自定义的。
参数iterable传的是一个可以迭代的对象,例如列表,元组,字符串这样的。
这个函数的意思就是将function应用于iterable的每一个元素,结果以列表的形式返回。注意到没有,iterable后面还有省略号,意思就是可以传很多个iterable,如果有额外的iterable参数,并行的从这些参数中取元素,并调用function。如果一个iterable参数比另外的iterable参数要短,将以None扩展该参数元素。还是看例子来理解吧!
a=(1,2,3,4,5)
b=[1,2,3,4,5]
c=”zhangkang”
la=map(str,a)
lb=map(str,b)
lc=map(str,c)
print(la)
print(lb)
print(lc)
输出:
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
[‘z’, ‘h’, ‘a’, ‘n’, ‘g’, ‘k’, ‘a’, ‘n’, ‘g’]
而python 中,可以直接 sum[1,2,3] 能得出6 , 所以map函数经常被当作 需要循环 的函数来写,要简单太多拉!!!
比如:l= [[1,2],[3,4]]
我想求 2+4 的答案:
l= [[1,2],[3,4]]
x = sum(map(lambda x:x[1],l))
print(x)
可以直接这么写,因为map函数返回一个[2,4] 而sum[2,4]? 等于 6 ,所以就很简单拉!!
04490149