您的位置:首页 > 理论基础 > 数据结构算法

python,数据结构

2016-03-01 10:39 288 查看
#把一个元素添加到列表的结尾,相当于 a[len(a):] = [x] 。
list.append(x)

#将一个给定列表中的所有元素都添加到另一个列表中,相当于 a[len(a):] = L
list.extend(L)

#在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于a.append(x)。
list.insert(i,x)

#删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.remove(x)

#从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从列表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
list.pop(i)

#返回列表中第一个值为x的元素的索引。如果没有匹配的元素就会返回一个错误。
list.index(x)

#返回 x 在列表中出现的次数。
list.count(x)

#对列表中的元素就地进行排序。
list.sort()

#就地倒排列表中的元素。 下面这个示例演示了链表的大部分方法
list.reverse()

#对于列表来讲,有三个内置函数非常有用: filter(), map(), 以及 reduce()。 filter(function, sequence)返回一个sequence(序列),包括了给定序列中所有调用function(item)后返回值为true的元素。(如果可能的话,会返回相同的类型)。如果该 序列 (sequence) 是一个 string (字符串)或者 tuple (元组),返回值必定是同一类型,否则,它总是list。
def f(x):return x%2 !=0 and x%3=0
filter(f,range(2,25))
#[5, 7, 11, 13, 17, 19, 23]

#map(function, sequence) 为每一个元素依次调用 function(item) 并将返回值组成一个列表返回。例如,以下程序计算立方:
def cube(x):return x*x*x
map(cube,range(1,11))
#[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

#可以传入多个序列,函数也必须要有对应数量的参数,执行时会依次用各序列上对应的元素来调用函数(如果某些序列比其它的短,就用None来代替)。如果把 None做为一个函数传入,则直接返回参数做为替代。
seq = range(8)
def add(x,y):return x+y
#[0, 2, 4, 6, 8, 10, 12, 14]

#reduce(function, sequence) 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function,再以返回值和第三个参数调用,依次执行下去。例如,以下程序计算 1 到 10 的整数之和
def add(x,y):return x+y
reduce(add,range(1,11))
#55

#列表推导式
#列表推导式为从序列中创建列表提供了一个简单的方法。 普通的应用程式通过将一些操作应用于序列的每个成员并通过返回的元素创建列表,或者通过满足特定条件的元素创建子序列。 例如, 假设我们创建一个squares列表, 可以像下面方式:
squares = []
for x in range(10)
squares.append(x**2)
#同下面一样
[x**2 for x in range[10]]
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

#有个方法可以从列表中按给定的索引而不是值来删除一个子项: del 语句。它不同于有返回值的pop()方法。语句del还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)

a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]
#[1, 66.25, 333, 333, 1234.5]
del a[2:4]
#[1, 66.25, 1234.5]
del a[:]
#[]
#元组和序列
#一个元组由数个逗号分隔的值组成,例如:
t = 12345, 54321, 'hello!'
t
#(12345, 54321, 'hello!')

#如你所见,元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可以有或没有括号,不过经常括号都是必须的(如果元组是一个更大的表达式的一部分)。不能给元组的一个独立的元素赋值(尽管你可以通过联接和切割来模拟)。还可以创建包含可变对象的元组,例如列表。 虽然元组和列表很类似,它们经常被用来在不同的情况和不同的用途。元组有很多用途。例如(x, y)坐标对,数据库中的员工记录等等。元组就像字符串,不可改变。 一个特殊的问题是构造包含零个或一个元素的元组:为了适应这种情况,语法上有一些额外的改变。一对空的括号可以创建空元组;要创建一个单元素元组可以在值后面跟一个逗号(在括号中放入一个单值不够明确)。丑陋,但是有效
singleton = 'hello',
print singleton
#('hello',)

#语句 t = 12345, 54321, 'hello!' 是 元组封装 (tuple packing)的一个例子:值12345,54321和'hello!'被封装进元组。其逆操作可能是这样:
x, y, z = t
#这个调用等号右边可以是任何线性序列,称之为序列拆封非常恰当。序列拆封要求左侧的变量数目与序列的元素个数相同。要注意的是可变参数(multiple assignment )其实只是元组封装和序列拆封的一个结合

# *集合
#Python 还包含了一个数据类型 set (集合) 。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和sysmmetric difference(对称差集)等数学运算。 大括号或 set() 函数可以用来创建集合。 注意:想要创建空集合,你必须使用 set() 而不是 {} 。后者用于创建空字典,是我们在下一节中介绍的一种数据结构。 以下是一个简单的演示:

basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
fruit = set(basket)
print fruit
#set(['orange', 'pear', 'apple', 'banana'])
'orange' in fruit
#True

a = set('abracadabra')
b = set('alacazam')

a - b
#set(['r', 'd', 'b'])

a | b
#set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])

a & b
set(['a', 'c'])

a ^ b
set(['r', 'd', 'b', 'm', 'z', 'l'])

#类似 for lists ,这里有一种集合推导式语法:
#a-> set(['r', 'd'])
这里写代码片

字典

理解字典的最佳方式是把它看做无序的键: 值对 (key:value pairs)集合,键必须是互不相同的(在同一个字 #典之内)。一对大括号创建一个空的字典: {} 。初始化时,在大括号内放置一组逗号分隔的键:值对,这也是字典##输 出的方式。 字典的主要操作是依据键来存储和析取值。也可以用 del 来删除键:值对(key:value)。 对#一个字典执行 keys() 将返回一个字典中所有关键字组成的无序列表(如果你想要排序,只需使用 sorted()。使用 #in 关键字(指 Python 语法)可以检查字典中是否存在某个关键字(指字典

tel = {‘jack’: 4098, ‘sape’: 4139}tel[‘guido’] = 4127

tel-> {‘sape’: 4139, ‘jack’: 4098, ‘guido’: 4127}

del tel[‘sape’]tel[‘irv’] = 4127

tel->{‘guido’: 4127, ‘irv’: 4127, ‘jack’: 4098}

tel.keys() -> [‘guido’, ‘irv’, ‘jack’]

‘guido’ in tel

True

dict() 构造函数可以直接从 key-value 对中创建字典:

dict([(‘sape’, 4139), (‘guido’, 4127), (‘jack’, 4098)])

{‘sape’: 4139, ‘jack’: 4098, ‘guido’: 4127}

此外,字典推导式可以从任意的键值表达式中创建字典:

{x: x**2 for x in (2, 4, 6)}

{2: 4, 4: 16, 6: 36}

如果关键字都是简单的字符串,有时通过关键字参数指定 key-value 对更为方便:

dict(sape=4139, guido=4127, jack=4098)

{‘sape’: 4139, ‘jack’: 4098, ‘guido’: 4127}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python