Python笔记4-20151029
一、切片
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的更多相关文章
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- python笔记 - day7-1 之面向对象编程
python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...
- python笔记 - day7
python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...
- python笔记 - day6
python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...
随机推荐
- spring.net AOP配置基础
在第一篇中,我们用配置代理工厂的方式实现了面向切面记日志的功能.非常便捷的实现了AOP,但当我们需要对多个切入点配置通知的时候就需要声明多个代理工厂,这样导致配置文件内容过多,配置过程也很繁琐.spr ...
- DES加密解密 与 Cookie的封装(C#与js互相加密解密)
2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密) 这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了) 使用的代码如下,非常方 ...
- T-SQL查询语句(二):嵌套查询
一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询.外层查询称为父查询,主查询.内层查询称为子查询 ...
- Linux centOS本地DNS安装
centOS本地DNS安装 在centOS里最常用的DNS服务工具应该是bind了.下面就以bind为例做一个DNS服务. 首先查看bind 是否已经安装 Rpm -qa | gerp bind 如果 ...
- 【deep learning学习笔记】最近读的几个ppt(四)
这几个ppt都是在微博上看到的,是百度的一个员工整理的. <Deep Belief Nets>,31页的一个ppt 1. 相关背景 还是在说deep learning好啦,如特征表示云云. ...
- Mybatis-Spring SqlSessionTemplate 源码解析
在使用Mybatis与Spring集成的时候我们用到了SqlSessionTemplate 这个类. <bean id="sqlSession" class="or ...
- Scrapy框架安装配置小结
Windows 平台: 系统是 Win7 Python 2.7.7版本 官网文档:http://doc.scrapy.org/en/latest/intro/install.html 1.安装Pyt ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- SublimeText快捷键
在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. ...
- mongodb tip-2
1.or 查询的格式: var condition = {$or:[{field:1},{field:2}]} 2.字符串存储日期也可以用$gt $gte $lt $lte 直接比较 var cond ...