python数据结构--2017-7-26
来源:互联网 发布:mac怎么卸载驱动 编辑:程序博客网 时间:2024/06/05 14:31
5.数据结构
5.1 深入列表
list对象的所有方法:
list.append(x) 添加一个元素到列表的末尾
list.extend(L) 将指定列表中的所有元素添加到另一个列表的末尾
list.insert(i,x) 在给定位置插入一个元素
list.remove(x) 删除列表中第一个值为x的元素,如果没有这样的元素将会报错。
list.pop(i) 删除列表中指定位置的元素并返回它,如果是list.pop()将删除并返回列表中的最后一个元素。
list.index(x) 返回列表中第一个值为x的元素的索引。如果没有这样的元素将会报错。
list.count(x) 返回列表中x出现的次数。
list.sort(cmp=None, key=None, reverse=False) 原地排序列表中的元素
list.reverse() 原地反转列表中的元素。
测试代码:
# -*- coding: UTF-8 -*-
'''
Created on 2017��7��26��
@author: zmz
'''
a = [66.25, 333, 333, 1, 1234.5]
print a.count(333), a.count(66.25),a.count('x')
a.insert(2, -1)
a.append(333)
print a
print a.index(333)
a.remove(333)
print a
a.reverse()
print a
a.sort()
print a
print a.pop();
print a
答案:
2 1 0
[66.25, 333, -1, 333, 1, 1234.5, 333]
1
[66.25, -1, 333, 1, 1234.5, 333]
[333, 1234.5, 1, 333, -1, 66.25]
[-1, 1, 66.25, 333, 333, 1234.5]
1234.5
[-1, 1, 66.25, 333, 333]
5.1.1 用list(列表)作为stack(栈)
列表方法使得将list当做栈非常容易,最先进入的元素最后一个取出(后进先出)。使用append()将元素添加到栈顶。使用不带索引的pop()从栈顶取出元素。
stack = [3, 4, 5]
stack.append(6)
stack.append(7)
print stack
print stack.pop()
print stack.pop()
print stack.pop()
print stack
答案:
[3, 4, 5, 6, 7]
7
6
5
[3, 4]
5.1.2 用list(列表)作为queue(队列)
也可以将列表当做队列使用,此时最先进入的元素第一个取出(先进先出),但这种方法效率很低。
可以使用collections.deque, 它设计的目的就是在两端都能够快速添加和弹出元素。
from collections import deque
queue = deque(["Eric","John","Michael"])
queue.append("Terry")
queue.append("Graham")
print queue.popleft()
print queue.popleft()
print queue
答案:
Eric
John
deque(['Michael', 'Terry', 'Graham'])
5.1.3 函数式编程工具
使用列表时三个函数非常有用:
filter(),map(),reduce()。
1.filter()
filter(function,sequence)返回的序列由function(item)结果为真的元素组成。
def f(x):return x % 2 != 0 and x % 3 != 0
print filter(f, range(2,25))
print range(2,25)#2--24
答案:
[5, 7, 11, 13, 17, 19, 23]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
2.map()
map(function,sequence) 为序列中的每一个元素调用function(item) 函数并返回结果的列表。
def cube(x):return x*x*x
print map(cube,range(1,11))
答案:
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
3.reduce()
reduce(function,sequence) 只返回一个值,它首先以序列的前两个元素调用函数function,然后再以返回的结果和下一个元素继续调用,依此执行下去。
def add(x,y):return x+y
print reduce(add, range(1,11))
答案:
55
5.1.4 列表推导式
5.2 del语句
有个方法可以从列表中根据索引而不是值来删除一个元素:del语句。这不同于有返回值的pop()方法。del语句还可以用于从列表中删除切片或清除整个列表(之前我们是将空列表赋值给切片)。
a=[-1,1,66.25,333,333,1234.5]
del a[0]
print a
del a[2:4] #2,3---第3个和第四个
print a
del a[:]
print a
答案:
[1, 66.25, 333, 333, 1234.5]
[1, 66.25, 1234.5]
[]
5.3 Tuples(元祖)和sequence(序列)
我们已经看到列表和字符串具有很多共同的属性,如索引和切片操作。它们是序列数据类型的两个例子(参见序列类型 — str, unicode, list, tuple, bytearray, buffer, xrange)。因为 Python 是一个正在不断进化的语言,其他的序列类型也可能被添加进来。还有另一种标准序列数据类型:元组。
5.4 set(集合)
Python还包含一个数据类型用于集合。集合中的元素没有顺序且不会重复。集合的基本用途有成员测试和消除重复的条目。集合对象还支持并集、交集、差和对称差等数学运算。
花括号或set()函数可以用于创建集合。注意:若要创建一个空的集合你必须使用set(),不能用{};后者将创建一个空的字典,一个我们在下一节中要讨论的数据结构。
这里是一个简短的演示
5.5 字典
Python内建的另一种有用的数据类型是字典(见映射类型 — 字典)。在其它语言中字典有时被称为“联合存储” 或者 “联合队列”。与序列不同,序列由数字做索引,字典由key 做索引,key可以是任意不可变类型;字符串和数字常用来做key。
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127
print tel
print tel['jack']
del tel['sape']
tel['irv'] = 4127
print tel
print tel.keys()
print 'guido' in tel
答案:
{'sape': 4139, 'jack': 4098, 'guido': 4127}
4098
{'jack': 4098, 'irv': 4127, 'guido': 4127}
['jack', 'irv', 'guido']
True
dict()构造函数直接从键-值对序列创建字典:
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]){'sape': 4139, 'jack': 4098, 'guido': 4127}
5.6 遍历的技巧
5.7 深入条件控制
while 和if 语句中使用的条件可以包含任意的操作,而不仅仅是比较。
比较操作符 in 和 not in 检查一个值是否在一个序列中出现(不出现)。is 和is not 运算符比较两个对象是否为相同的对象;这只和列表这样的可变对象有关。所有比较运算符都具有相同的优先级,低于所有数值运算符。
比较可以级联。例如,a< b ==c测试a是否小于b并且b是否等于c。
可以使用布尔运算符 and和 or 组合,比较的结果(或任何其他的布尔表达式)可以用not 取反。这些操作符的优先级又低于比较操作符;它们之间,not 优先级最高,or 优先级最低,所以 A and not B or C 等效于 (Aand (not B))or C。与往常一样,可以使用括号来表示所需的组合。
布尔运算符and 和or 是所谓的 短路 运算符:依参数从左向右求值,结果一旦确定就停止。例如,如果A 和C 都为真,但B是假,A and B and C 将不计算表达式C。用作一个普通值而非逻辑值时,短路操作符的返回值通常是最后一个计算的。
可以把比较或其它逻辑表达式的返回值赋给一个变量。例如,
- python数据结构--2017-7-26
- 7、Python数据结构
- python数据结构
- python数据结构
- python 数据结构
- python 数据结构
- Python 数据结构
- Python数据结构
- python 数据结构
- python 数据结构
- python 数据结构
- python数据结构
- python-数据结构
- python数据结构
- python,数据结构
- Python-----数据结构
- python数据结构
- python 数据结构
- 2017 Multi-University Training Contest 1
- 常见内存错误
- PAT乙级 1048. 数字加密(20)
- 交换排序(冒泡排序&&快速排序)
- 【位操作】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
- python数据结构--2017-7-26
- 多态&多态对象模型
- 前端面试题 ----- HTML语义化 link和@import的区别
- PAT乙级 1049. 数列的片段和(20)--数学问题
- Tengine健康检查模块配置
- 二叉树面试题之二叉树镜像
- Java NIO原理图文分析及代码实现
- C语言模拟实现atoi函数
- PAT乙级 1050. 螺旋矩阵(25)