Python高级教程-sorted】的更多相关文章

Python中的排序算法 排序是程序中经常用到的算法.通常规定,对于两个元素x和y,如果认为x<y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接进行排序. Python内置的sorted()函数就可以对list进行排序: >>> sorted([36,5,12,9,21]) [5, 9, 12, 21, 36] 此外,sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自…
关键字is 和 == 的区别 a = 'hello world' b = 'hello world' a == b #返回True a is b #返回False 注意:is 判断是否是一个ID, == 判断内容是否一致. 深拷贝和浅拷贝 import copy a = [1,2,3,4,5] b = a #浅拷贝,a,b同时指向一个id,当其中一个修改时,另外一个也会被修改. c = copy.deepcopy(a) #深拷贝,c单独开辟一个id,用来存储和a一样的内容. d =a[:] #这…
多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类可以扩展父类的功能. Animal类的层次设计,假设要实现以下4中动物: Dog - 狗狗: Bat - 蝙蝠: Parrot - 鹦鹉: Ostrich - 鸵鸟 如果按照哺乳类和鸟类来分: 如果按照“能跑”和“能飞”来归类,就应该设计出下图这样的类层次: 如果把上面的两种分类都包含进来,就得设计更多的层次: 哺乳类:能跑的哺乳类,能飞的哺乳类: 鸟类:能跑的鸟类,能飞的鸟类. 这么一来,类的层次就复杂了.正确的做法是采用多重继承…
Python中的filter() Python内建的filter()函数用于过滤序列.和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. 例如,在一个list中,删掉偶数,只保留奇数,可以这么写: >>> def is_odd(n): return n % 2 == 1 >>> filter(is_odd,[x for x in…
Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 举例说明,有一个函数f(x)=X^2,要把这个函数作用在一个list[1,2,3,4,5,6,7,8,9]上,就可以用map()实现: >>> def f(x): return x*x >>> map(f,[x for x in ra…
Higher-order function(高阶函数) 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 但是,如果只写abs呢? >>> abs <built-in function abs> 可见,abs(-10)是函数调用,而abs是函数本身. 要获得函数调用结果,可以把结果赋值给变量: >>> x = abs(-10) >>> x 10 但是…
生成器(Generator) 通过列表生成式,可以直接创建一个列表.但是,受内存限制,列表的容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那么后面绝大多数元素占用的空间都白白浪费了. 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器(Generator). 要创建一个gene…
List Comprehensions(列表生成式) 列表生成式,是Python内置的非常简单却强大的可以用来创建list的生成式. 例如,要生成list:[1,2,3,4,5,6,7,8,9,10]可以用list(range(1,11)): >>> list(range(1,11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1*1,2*2,3*3,........,10*10]: >>> L = [] >>> f…
Python中的迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for...in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码: for ( int i = 0 ; i < list.length ; i++ ) { n = list[i]; } 可以看出,Python的for循环抽象程度要高于for循环,因为Python的for循环不仅…
Python中的切片 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: >>> L = ['A','B','C','D'] 对经常取指定索引范围的操作,用循环十分繁琐,因此python提供了切片(Slice)操作符,能大大简化这种操作. 取前3个元素,用一行代码就可以完成切片: >>> L = ['A','B','C','D'] >>> L[0:3] ['A', 'B', 'C'] L[0:3]表示,从索引0开始取,知道索…