一、切片

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']

Python笔记4-20151029的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

  10. python笔记 - day6

    python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...

随机推荐

  1. android 组件内部实现触摸事件,更改背景

    当我们需要实现触摸事件的时候,通常就会想到OnTouchEvent这个方法,它能够获取触摸点的坐标,而组件同样也有这样的一个功能,使用这个功能,可以实现组件在父布局界面上移动,缩放,更改背景图片.这里 ...

  2. 使用CAShapeLayer绘图

    之前讲过使用UIBezierPath在UIView的drawRect中绘图, 今天我们讲下另外一种方式: CAShaperLayer 先说说使用CAShapeLayer的优点: GPU执行, GPU执 ...

  3. CPU内存管理和linux内存分页机制

    一.概念 物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应.——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理 ...

  4. [转]Ubuntu10下MySQL搭建Amoeba系列(文章索引)

    一.前言(Introduction) 使用了Amoeba有一段时间了,发现官方博客:Amoeba使用指南有很多地方都是错误的,在我实战中给到一些错误的指示,所以我想写些在搭建的实战中给大家一点指引.欢 ...

  5. es6 Module

    前言: 这是阮一峰老师的ECMA6入门module一章的缩减,只抽取了我在项目中有用到的内容.带着问题去看老师的教程.感觉吸收更快,也明白了偶尔遇到的export不出来的问题. es6模块设计思想: ...

  6. webpack入门必知必会

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 这是我第一篇介绍webpack的文章,先从一个入门教程开始吧,后续会有更多相关webpack的文章推 ...

  7. [ios]iphone 获取UIWebView内Html方法

    原文:http://blog.csdn.net/diyagoanyhacker/article/details/6564897 获取所有html:NSString *lJs = @"docu ...

  8. 【CSS学习笔记】关于有语义标签

    1.哪些是单闭合标签,哪些是双闭合标签? HTML的单闭合标签有: 1.<br /> 2.<hr /> 3.<area /> 4.<base /> 5. ...

  9. CA认证

    nginx下证书配置 nginx 下 配 置 CA 认 证   为nginx配置https并自签名证书   开启443端口   实验环境: centos6.5    192.168.16.14   [ ...

  10. 遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了

    遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了 找了一下午没解决.