(1):list的排序算法:

参考链接:http://blog.csdn.net/horin153/article/details/7076321

示例: DisListSorted = sorted(DisList, key = lambda DisList: DisList[1], reverse =False) 使用lambda函数,利用元素索引作为key;

在 Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).

其中:

cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数;

key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素;

reverse 是一个布尔值, 表示是否反转比较结果.。reverse =False 代表从小到大...

(2):几种排序算法:

1, 通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.
也就是说, 同等情况下, 写 key 函数比写 cmp 函数要高效很多. 2, 对一些貌似比较复杂的排序, 也是不需要写 cmp 函数的, 举例如下:
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] 用元素索引做 key:
>>> sorted(students, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 用元素已经命名的属性做 key:
>>> sorted(students, key=lambda student: student.age) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 用 operator 函数来加快速度, 上面两个排序等价于:
>>> from operator import itemgetter, attrgetter
>>> sorted(students, key=itemgetter(2))
>>> sorted(students, key=attrgetter('age')) 用 operator 函数进行多级排序, 这个就是比较复杂的应用. 按我以前的理解, 是一定要写个定制的 cmp 函数的. 现在看来, 以前真的够笨.
# sort by grade then by age
>>> sorted(students, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> sorted(students, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] 3, 根据字典值排序
>>> d = {'a':2, 'b':23, 'c':5, 'd':17, 'e':1} #1, 返回 pair 对:
from operator import itemgetter
>>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)
[('b', 23), ('d', 17), ('c', 5), ('a', 2), ('e', 1)] #2, 仅返回 keys:
>>> sorted(d, key=d.__getitem__, reverse=True)
['b', 'd', 'c', 'a', 'e']  4, sorted() 会返回一个新的已经排好序的 list.
list.sort() 是就地排序, 以节约空间, 当然就不会返回一个排好序的新的 list 了. 这对大的 list 排序是有空间优势的.

(3):KNN算法实例:

<p>#  DataMatrix 为向量数组 列表
</p><p> def creatDataSetLabel(DataMatrix, LabelVec):
    
    Classifier ={}
    if len (LabelVec) !=len (DataMatrix):
        return Classifier
    
    for idx in range(len (LabelVec)):
        Classifier[LabelVec[idx] ]  = DataMatrix[idx]        
    
    return Classifier</p>
<p>#filename 为文件夹
</p><p>def   trainClassifier(filename):
    DataMatrix= creatDataSet(filename)
    LabelNum  = len(DataMatrix )
    LabelVec  = creatLabel(LabelNum)
    Classifier= creatDataSetLabel(DataMatrix,LabelVec)
 
    return Classifier
</p><p>
</p><p>#输入向量,返回k近邻!
</p><p>def classify(Classifier, Feature ,K):
    
    if len(Feature) != len(Classifier[0] ):
        return 0
    
    kNear = []
    Distance ={}# similarity
    
    for i in range(len(Classifier) ):
        DisVec = Classifier[i] - Feature
        DisMat = DisVec **2
        Distance[i] = DisMat.sum()
    
    DisList =[]
    for key in Distance:
        DisList.append([key, Distance[key] ])</p><p>
    DisListSorted = sorted(DisList, key = lambda DisList: DisList[1], reverse =False) #排序 距离
    
    for i in range(K):
        kNear.append(DisListSorted[i] )
    
    return kNear
</p>

最新文章

  1. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
  2. java里面interface,implement和extends的作用和用法
  3. Linux(CentOS)中安装MongoDB
  4. redis面试
  5. Java使用poi包读取Excel文档
  6. permutation求全排列
  7. 大数的加法运算,杭电oj-1002
  8. MySQL字符串相关函数学习一
  9. PLSQL:orecal,tnsname简介
  10. Linux机器重启情况查询
  11. js 循环list
  12. ubuntu 18.04下安装配置HBase问题记录
  13. Keil uVision4 for ARM 下增加支持C51,C5x
  14. 在Cygwin里,如何进入到C盘?
  15. Xcode : svn 无法上传静态库(.a)文件
  16. 前端之css笔记1
  17. Last Daily Scrum (2015/11/9)
  18. LoadRunner FAQ2
  19. 常见GAN的应用
  20. c&amp;c++ datetime

热门文章

  1. loadrunner录制不了浏览器
  2. Call to undefined function openssl_decrypt()
  3. 洛谷P1090 合并果子【贪心】
  4. Oracle SQL语句之常见优化方法总结
  5. Django链接Mysql 8.0 出现错误(1045:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO) 的一种解决方法
  6. AtCoder ABC 076D - AtCoder Express
  7. lucene_09_solrj的使用
  8. UDP bind() IP和prot
  9. requireJS文件夹
  10. js动态创建表格------Day59