在网上看到这么几段代码,有些疑惑。
a=range(10)
b=a[::-1]
a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
c=zip(a,b)
c
[(0, 9), (1,8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)]
c.sort(key=lambda x:x[0])
c
[(0, 9), (1,8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)]
c.sort(key=lambda x:x[1])
c
[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1,8), (0, 9)]
疑惑:c.sort(key = lambda x:x[0]) 与c.sort(key = lambda x:x[1])无法理解。key的使用是为其提供一个函数,通过此函数为每个元素创建一个键,所有元素根据键来排序。那么这里的函数就是lambda x : x[0]x[0]是什么?是指每个元组里的第一个元素?那就是说按照元组里第一个元素的大小进行排序,那为什么不是对列表里的元素(即元组)进行排序而是对列表里的元组里的元素进行了排序?
还有这个:
L = [(\'b\',2),(\'a\',1),(\'c\',3),(\'d\',4)]
L.sort(cmp = lambda x,y:cmp(x[1],y[1]))
L
[(\'a\', 1), (\'b\', 2), (\'c\', 3), (\'d\', 4)]
这里对元组进行了排序,又是什么原理?是不是因为提供了两个参数x,y?
这个就更费解了:
import random
def f(x,y):return random.randint(1,2)*2-3
a=range(10)
print a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a.sort(f)
print a
[3, 1, 8, 5, 2, 9, 0, 4, 6, 7]
f()为什么要提供两个参数?a.sort(f)到底是什么原理?有人说f(x,y)无论输入什么返回值都是-1或1是原因。也有人说只要f()返回的是随机值便行?原理是什么?
|