python学习笔记系列----(三)数据结构
这一章主要是介绍了python一些常用的数据结构,比如list,tuple,dictionary,set,以及一些实用遍历技巧,主要讲的还是list。
3.1 list
主要介绍了list的一些常用的使用函数。这里就不多说和举例了。
增加:append(),insert()
删除:pop(),remove(),del()
查找:index()
其他:计算item出现次数:count();item排序:sort();item逆序:reverse()
其中del()较为特殊,可以根据index删除特定元素,也可以删除list内的部分切片,也可以删除整个list
3.1.1 使用list作为栈
把list当作c++的数据结构栈(先进后出)来使用,主要还是因为list提供了2个函数:append()和pop(),append()是在list的最后一个元素后增加新元素,而pop()是返回list最后一个元素,然后删除原list中的该元素。
list的增加和删除操作都对应有2个方法,但是append()和pop()的性能要高很多(少移动)。
>>> stack = [, , ]
>>> stack.append()
>>> stack
[, , , ]
>>> stack.pop() >>> stack
[, , , ]
3.1.2 使用list作为队列
把list当成队列(先进先出)来使用也是可以的,但是需要引入deque类,转换成该类后使用其方法就能实现
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")
>>> queue.popleft()
'Eric'
>>> queue
deque(['John', 'Michael', 'Terry'])
3.1.3 函数编程工具
主要介绍与list一起使用时非常有用的3个内置函数: filter(), map(), and reduce().
filter(function, sequence)返回的是一个序列,这个序列里的每一个值在function中都能返回ture。这个sequence不仅仅包含list类型,还可以是str或者是tuple类型或者其他类型;如果是str或者tuple,就返回str或者tuple,但是如果是list或者其他,就返回list类型。
map(function, sequence)也是返回一个序列,这个序列里的每一个值都在function中进行过计算。
reduce(function, sequence) 返回则是一个单一的数值,它首先以序列的前两个元素调用函数 function,然后再以返回的结果和下一个元素继续调用,依此执行下去。
>>> def f(x): return x % == or x % ==
...
>>> filter(f, range(, ))
[, , , , , , , , , , ]
>>> def cube(x): return x*x*x
...
>>> map(cube, range(, ))
[, , , , , , , , , ]
>>> def add(x,y): return x+y
...
>>> reduce(add, range(, ))
55
实际上,filter(),map(),reduce()都是内置的标准库,内置标准库里到底包含哪些类和方法呢?可以使用dir(__builtin__)来得知,如果想知道其中一个方法的官网的解释,打印出help(方法名)就可以了,下面是个示例:
# -*- coding: utf- -*-
import __builtin__ if __name__=="__main__": print dir(__builtin__)
print help(map)
其运行后部分结果,截图如下:


3.1.4 列表推导式
这个翻译感觉怪怪的,阅读完整篇感觉就是怎么产生一个新的list?比如从一个list演变成另一个list,两个list的各种组合成一个新的list等等。实际上感觉部分复杂的可用用前面那3个工具代替可能能更好理解。
比如,产生一个列表,其值为0-9的平方,有3种实现方式:
# 方式1
list1 = []
for i in range(,):
list1.append(i**) #方式2
def square(i):
return i**
list2 = map(square,range(,)) #方式3
list3 = [i** for i in range(,)]
第三种就是这小节讲的重点,顿时~~还有一种两个list之间的组合,测试可能经常会使用到,比如list1=[1,2,3],list2=[3,1,4] ,现在得到不同列表元素内不同值的组合列表,有2种实现方式:
# 方式1
for x in list1:
for y in list2:
if x != y:
list3.append((x,y)) # 方式2
list4 = [(x,y) for x in list1 for y in list2 if x!=y]
最后介绍了list的嵌套推导式,可以理解就是list的嵌套循环使用。如下例子所示,list1是一个二位数组,现把每列的第一个数放第一个list内,第二个放第二个list内...
list1 =[[, , ], [, , ],[, , ]]
list3=[] # 方式1
for row in list1:
list2 = []
for i in range(,):
list2.append(row[i])
list3.append(list2)
# 方式2
list3 = [[row[i] for row in list1]for i in range(,)] # 方式3
list3 = zip(*list1)
3.2 tuple
tuple的基本函数使用跟list有点类似,但是它又有自己的特点:
A. tuple 是不可变类型,一个已定义的tuple类型,企图去改变其内的值,会报错;
B. 定义空的tuple使用语句:emptytuple = ()
C. 定义只有一个元素的tuple使用语句:singletuple ='hello', (逗号不能漏掉,漏掉则视为一个str类型)
3.3 set
set类型的要求就是集合内没有重复的元素,可以从list类型使用set()转变成set类型,与其他的sequence 类型的区别是,可以对set类数据进行“取交集,差集,并集”等操作。
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> fruit = set(basket) # create a set without duplicates
>>> fruit
set(['orange', 'pear', 'apple', 'banana'])
>>> 'orange' in fruit # fast membership testing
True >>> a = set('abracadabra')
>>> b = set('alacazam')>>> a - b # letters in a but not in b
set(['r', 'd', 'b'])
>>> a | b # letters in either a or b
set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
>>> a & b # letters in both a and b
set(['a', 'c'])
>>> a ^ b # letters in a or b but not both
set(['r', 'd', 'b', 'm', 'z', 'l'])
3.4 dictionary
dictionary与list这些sequences类(list,tuple)不同在于,它可以根据key来进行索引,key必须是唯一且不可变的值,比如number类和str类的,tuple类(不包含可变元素)就可以做key,但是list就不能做key。key()方法返回的就是这个dictionary 的所有key值,sorted()就是根据key进行排序,对dictionary 进行遍历实际是对key值进行遍历操作(顺序不确定)。
>>> tel = {'jack': , 'sape': }
>>> tel['guido'] =
>>> tel
{'sape': , 'guido': , 'jack': }
>>> tel['jack']
>>> del tel['sape']
>>> tel['irv'] =
>>> tel
{'guido': , 'irv': , 'jack': }
>>> tel.keys()
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
3.5 常用的遍历技巧
1. 对sequence类型数据进行遍历,如果需要输出每个元素的下标,可以使用enumerate()函数:
list1 = ['loleina', 'test']
for i,item in enumerate(list1):
print i,item
2. 倒序一个sequence,可以使用 reversed() 方法。
for i in reversed(list1):
print i
实际上,list1还是顺序的呢~~
3. 对sequence排序后输出,使用sorted()方法
list2 = [, , , ]
for i in sorted(list2):
print i
4. 对字典进行遍历,同时输出key,和value,使用iteritems()方法
dictionary1 = {'name': 'loleina', 'age': }
for key,value in dictionary1.iteritems():
print key,value
当需要循环遍历一个list,且要改变一个list的时候,最好是在循环里创建一个新的list,上述的例子中倒序一个list或者是排序,实际上是对list的副本进行了操作,list本事并没有发生改变,如果希望list本身发生改变,可以用以下方法:
list2 = [, , , ]
list3=[]
for i in reversed(list2):
list3.append(i)
list2 = list3
python学习笔记系列----(三)数据结构的更多相关文章
- python学习笔记系列----(一)python简介
一个月前,就按下决心要系统的学习下python了,虽然之前有学习过java,学习过c++,也能较为熟练的使用java做自动化测试看懂c++里的业务逻辑,但是实际上有那么多的东西自己还是不清楚,今天下定 ...
- Python基础笔记系列三:list列表
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python中的list列表是一种序列型数据类型,一有序数据集合用逗号间隔 ...
- python学习笔记系列----(八)python常用的标准库
终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...
- Python学习笔记系列
1.小甲鱼 python 学习系列笔记
- python 学习笔记一 (数据结构和算法)
2018年刚刚过完年,从今天起,做一个认真的技术人.开始进入记笔记阶段. python内置了很多数据结构,list , set,dictionary 1.将序列分解为单独的变量 1.1 通过赋值的方式 ...
- Python学习笔记(三)字符串类型及其操作(2)
1.字符串的表示 字符串是字符的序列表示,可以由一对单引号(‘).双引号(“)或三引号(’‘’)构成.其中,单引号.双引号和三引号都可以表示单行字符串,但是只有三引号可以表示多行字符串 在使用双引号时 ...
- Python学习笔记系列——数据结构相关
Python有4种数据结构:列表(list).字典(dictionary).元组(Tuple).集合(set).从最直接的感官上来说,这四种数据结构的区别是:列表中的元素使用方括号括起来,字典和集合是 ...
- python学习笔记系列----(五)输入和输出
这一章主要是讲述程序展示其数据的一些方法,一般都是直接按照一定的格式输出在屏幕,或者写入到文件以便以后使用.按照一定格式的输出,在python中实际就是对str的操作,主要就是介绍了formart() ...
- python学习笔记系列----(二)控制流
实际开始看这一章节的时候,觉得都不想看了,因为每种语言都会有控制流,感觉好像我不看就会了似的.快速预览的时候,发现了原来还包含了对函数定义的一些描述,重点讲了3种函数形参的定义方法,章节的最后讲述了P ...
随机推荐
- jquery 练习笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- Web开发流程
知乎上关于Web开发流程豪情给予的回答 web前端开发流程是什么?进行操作会用到哪些便捷的小工具?是先用模板做好,然后在基础上改吗??正常大家说的改框架是不是指的用模板做的网站原文件?前端开发做的文件 ...
- HTML5的全新语义化元素
1.<section> <section>元素用来定义文档或应用程序中的区域(或节).例如,可以用它组织你的个人信息,一个<section>用于联系信息,另一个用于 ...
- PDMS模型导出RVM格式
2 .将PDMS中对象模型导出为RVM格式的宏文件代码如下: eg:如果要导出某几个房间内的全部bran equi !strus = array()!strus.append(|/1RXR246ZL| ...
- 简单的行为控制管理方法,自动登录,session定时验证码过期
代码很简单 实现的方式很多,用cookies 用static 变量 file文件缓存 等等 比如 //简单行为管理,如果请求此方法次数多于5次,就显示验证码 吧当前方法的name传进来,有效时间是5分 ...
- mysql_索引原理及优化
思考: 我们知道mysql最好的数据存储量级是百万级别,是的往往在百万级别或者几十万级别就会出现慢查询(我对慢查询的定义是大于1秒),几年前我所在的一个做pos机支付的联机交易的核心系统组,当时就做过 ...
- Mysql5.6.17 zip版本安装
1.把 mysql解压到自定义 D:\mysql-5.6.17-W642.我的电脑--属性--高级--环境变量--系统变量--新建系统环境变量 变量名:MYSQL_HOME 变 ...
- 响应式布局 Bootstrap
github介绍 (1)简单灵活可用于架构流行的 用户界面和交互接口 的html.css.javascript工具集 (2)基于html5.css3的bootstrap,具有大量的诱人特征: 友好的学 ...
- WordPress基础:订阅源rss的使用
设置->阅读,可设置rss显示效果 RSS源为:http://wordpress目录/feed 把这个地址放入你的rss阅读器进行订阅即可,最简单的就是使用QQ邮箱里面的阅读空间进行订阅.