python 01

作者: 小鱼儿喜欢花无缺 | 来源:发表于2018-01-30 09:59 被阅读3次

    list

    Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

    变量classmates就是一个list。用len()函数可以获得list元素的个数:

    如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:

    list是一个可变的有序表,所以,可以往list中追加元素到末尾:

    classmates.append('Adam')

    classmates

    也可以把元素插入到指定的位置,比如索引号为1的位置:

    classmates.insert(1, 'Jack')

    classmates

    要删除list末尾的元素,用pop()方法:

    要删除指定位置的元素,用pop(i)方法,其中i是索引位置:

    另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:>>> classmates = ('Michael', 'Bob', 'Tracy’)

    t = (1)

    t

    1

    定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。

    所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

    根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。

    也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:

    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

    二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:

    d.get('Thomas')

    d.get('Thomas', -1)

    要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回

    如果想定义一个什么事也不做的空函数,可以用pass语句

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。

    要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出:

    fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n

    所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。

    于是,fact(n)用递归的方式写出来就是:

    Python内建了map()和reduce()函数。

    如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。

    我们先看map。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

    举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:

    def f(x):

    ... return x * x

    ...

    map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

    [1, 4, 9, 16, 25, 36, 49, 64, 81]

    再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    比方说对一个序列求和,就可以用reduce实现:

    def add(x, y):

    ... return x + y

    ...

    reduce(add, [1, 3, 5, 7, 9])

    25

    Python内建的filter()函数用于过滤序列。

    和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

    Python内置的sorted()函数就可以对list进行排序:

    传入自定义的比较函数reversed_cmp,就可以实现倒序排序:

    sorted([36, 5, 12, 9, 21], reversed_cmp)

    [36, 21, 12, 9, 5]

    相关文章

      网友评论

        本文标题:python 01

        本文链接:https://www.haomeiwen.com/subject/mhmqzxtx.html