zoukankan      html  css  js  c++  java
  • Python笔记420151029

    一、切片

    L = [''Michael','Sarah','Tracy','Bob','Jack']

    取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:

    >>> r = []

    >>> n = 3

    >>> for i in range(n):

                r.append(L[i])

    >>>r

    ['Michael','Sarah','Tracy']

    对这种经常取制定索引范围的操作,用循环十分繁琐,因此,Python提供了切片操作符。

    对应上面的问题,取前3个元素:

    >>>L[0:3]

    ['Michael','Sarah','Tracy']

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2。

    如果第一个索引是0,还可以省略:

    >>>L[:3]

    ['Michael','Sarah','Tracy']

    也可以从其他为止索引

    类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片:

    >>>L[-2:]

    ['Bob','Jack']

    >>>L[-2:-1]

    ['Bob']

    牢记倒数第一个元素索引是-1。

     二、迭代

    如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代。

    在Python中,迭代通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的。

    >>>d = {'a':1,'b':2,'c':3}

    >>>for key in d:

              print(key)

    a

    b

    c

    默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k,v in d.items()。

    字符串也是可迭代对象:

    >>>for ch in 'ABC':

               print(ch)

    A

    B

    C

    如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

    >>>from collections import Iterable

    >>> isinstance('abc',Iterable)

    True

    >>>isinstance([1,2,3],Iterable)

    True

    >>>isinstance(123,Iterable)

    False

    如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

    >>>for i, value in enumerate(['A','B','C']):

              print(i,value)

    0 A 

    1 B

    2 C

    >>>for x, y in [(1,1),(2,4),(3,9)]:

              print(x,y)

    1 1

    2 4

    3 9

    三、列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

    >>>list(range(1,11))

    [1,2,3,4,5,6,7,8,9,10]

    如果要生成[1×1,2×2,...10×10]怎么做:

    >>>L = []

    >>>for x in range(1,11)

              L.append(x * x)

    >>>L

    [1,4,9,16,25,....100]

    用列表生成式则可以用一行语句待敌循环生成上面的list:

    >>>[x * x for x in range(1,11)]

    [1,4,9,16,25,....100]

    for循环后面还可以加上if判断:

    >>>[x * x for x in range(1,11) if x% 2 == 0]

    [4,16,36,64,100]

    还可以使用两层循环,可以生成全排列:

    >>>[m + n for m in 'ABC' for n in 'XYZ']

    ['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']

    运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

    >>>import os #导入os模块,模块的概念后面讲到

    >>> [d for d in os.listdir('.')] #os.listdir可以列出文件和目录

    ['.emacs.d','.ssh','.Trash','Adlm','Applications','Desktop','Documents','Download','Library','Movies','Misic','Pictures','Public','Virtual Box VMs','Workspace','XCode']

    for循环可以同时使用两个甚至多个变量,比如dict的items可以同时迭代出key和value:

    >>>d = {'x':'A','y':'B','z':'C'}

    >>>for k, v in d.items():

              print(k,'=', v)

    y = B 

    x = A 

    z = C

    列表生成式也可以使用两个变量来生成list:

    >>>d = {'x':'A','y':'B','z':'C'}

    >>>[k + '=' v for k, v in d.items()]

    ['y=B','x=A','z=C']

    最后把一个list中所有的字符串变成小写:

    >>>L = ['Hello','World','IBM','Apple']

    >>>[s.lower() for s in L]

    ['hello','world','ibm','apple']

  • 相关阅读:
    《剩女郎》的艺术魅力
    话剧《剩女郎》
    实验四
    手机app
    APP
    卡尔曼滤波 —— MATLAB实现
    卡尔曼滤波
    卡尔曼滤波
    2017 年全国大学生电子设计竞赛试题——四旋翼自主飞行器探测跟踪系统(C 题)【本科组】2
    2017 年全国大学生电子设计竞赛试题——四旋翼自主飞行器探测跟踪系统(C 题)【本科组】2
  • 原文地址:https://www.cnblogs.com/diaosicai/p/4919946.html
Copyright © 2011-2022 走看看