这句代码来源于实验楼的一个实验,python破解验证码,此处贴出相关部分代码,以便解释
his = im.histogram()
values = {}
for i in range(256):
values[i] = his[i]#添加字典元素方法:以下标作为键来添加元素
for j,k in sorted(values.items(),key=lambda x:x[1],reverse = True)[:10]:
print j, k
一:im.histogram()
含义:返回一个图像的直方图。这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来(例如,“RGB”图像的直方图有768个值)
颜色直方图的每一位数字都代表了在图片中含有对应位的颜色的像素的数量。
怎么理解这句话呢?
假如说图像是P模式,P模式是8bit表示一个像素,可以表示2的8次,也就是256个像素。那么histogram函数返回的是256个值,第十个值表示像素值为10的像素的个数
二:sorted()方法
1.sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
2.sorted 语法:
sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
iterable -- 可迭代对象
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) #对二维列表中的15,12,10进行升序(下标从0开始)
>>> [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
3.lambda用于sorted方法示例
sorted([1,2,3,4,5],key=lambda x:abs(5-x),reverse=True)
这句话的涵义:将列表[1,2,3,4,5]中的每一个元素当作lambda中的x,带入abs(5-x)之后得出的结果按照从大到小的顺序排序
据此理解sorted(values.items(),key=lambda x:x[1],reverse = True)
values.items()返回的是{(键1:值1),(键2:值2)},将这个函数的返回值带入lambda中,此时(键1:值1)相当于一个元素x此时我们需要比较的是值,所以lambda的式子是lambda x:x[1],
三:for j,k in sorted(values.items(),key=lambda x:x[1],reverse = True)[:10]:
含义:将values字典按照histogram值从大到小的顺序进行排序,再对排序后的进行切分,取字典中的前十个。j为字典的键,k为字典的值
[:10]是对列表进行切分的意思,L=[1,2,3,4,5,6,7,8,9,0,11] 切分方法:L[start:end:step]