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

python学习笔记2:数据结构

2013-02-28 17:59 351 查看
python数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或字符,甚至可以是其他数据结构。

在python中,最基本的数据结构是序列(sequence)。

序列中的每个元素被分配一个序号---即元素的位置,也被为索引。

序列概述

python包含6种内建的序列
例:
edward = ['Edward Gumby',42]

索引

序列中的所有元素都是有编号的----从0开始递增。
greeting = 'hello'
greeting[0]
输出:
h

分片

与使用索引来访问呢单个元素类似,可以使用分片操作来访问一定范围内的元素。分片通过冒号相隔的两个索引来实现:
tag = '<a href="http://www.python.org">Python web sit</a>'
tag[9:30]
tag[32:-4]

基本的列表操作

1、改变列表:元素赋值

x = [1,1,1]
x[1] = 2
x
输出:[1,2,1]

2、删除元素

names = ['Alice','Beth','Cecil','Dee-Dee']
del names[2]
names
输出:['Alice','Beth','Dee-Dee']

3、分片赋值

name = list('Perl')
name
name[2:] = list('ar')
name
输出:['P','e','a','r']
分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素
numbers = [1,5]
numbers[1:1] = [2,3,4]
numbers
输出:[1,2,3,4,5]

列表方法

方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或者其他类型的对象。一般来说,方法可以这样进行调用:

对象.方法(参数)
除了对象被放置到方法名之前,并且两者之间用一个点号隔开,方法调用与函数调用很类似。

1、append追加新的对象

append方法用于在列表末尾追加新的对象:
lst = [1,2,3]
lst.append(4)
lst
输出:[1,2,3,4]

2、count统计某个元素次数

count方法统计某个元素在列表中出现的次数
['to' 'be' 'or' 'not' 'to' 'be'].count('to')

3、extend列表末尾一次性追加

extend方法可以在列表的末尾一次性追加另一个序列中的多个值。(可以用新列表扩展原有的列表)
a = [1,2,3]
b = [4,5,6]
a.extend(b)
a
输出:[1,2,3,4,5,6]


使用分片赋值来实现相同的结果:
a = [1,2,3]
b = [4,5,6]
a[len(a):] = b
a
输出结果一样

4、index索引位置

index方法用于列表中找出某个值第一个匹配项的索引位置
knights = ['We','are','the','knights','who','say','ni']
knights.index('who')

5、insert插入

insert方法用于将对象插入列表中
numbers = [1,2,3,4,5,6,7]
numbers.insert(3,'four')
输出:
[1,2,3,'four',5,6,7]
与extend方法一样,insert方法的操作也可以用分片赋值来实现

6、pop移除

pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值
x = [1,2,3]
x.pop()
3
x
[1,2]

7、remove移除

remove方法用于移除列表中某个值的第一个匹配项
x = ['to','be','or','not','to','be']
x.remove('be')

8、reverse反向

reverse方法将列表中的元素反向存放

9、sort排序

sort方法用于在原位置对列表进行排序。在“原位置排序”意味着改变原列表的列表,从而让其中的元素能按一定的顺序排序,而不是简单地返回一个已排序的列表副本
x = [4,6,2,1,7,9]
x.sort()
x
输出:
[1,2,4,6,7,9]


=====================
x = [4,6,2,1,7,9]
y = x[:]
y.sort()
y
输出和上面结果一样


再次调用x[:]得到的是包含了X所有元素的分片
=====================
另一种获取已排序的列表副本的方法是,使用sorted函数
x = [4,6,,2,1,7,9]
y = sorted(x.)

10、高级排序

如果希望元素能够按照特定的方式进行排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素),那么可以通过compare(x,y)的形式自定义比较函数。
compare(x,y)函数会在 x<y时返回负数,在x>y时返回正数,如果x=y则返回0。定义好函数之后,就可以提供给sort方法作为参数了。
内建函数cmp提供了比较函数的默认实现方式:
cmp(42,32)
输出:1
cmp(99,100)
输出:-1
cmp(10,10)
输出:0
numbers = [5,2,9,7]
numbers.sort(cmp)
numbers
[2,5,7,9]

sort方法有另外两个可选的参数 --  key 和 reverse。 如果要使用它们,那么久要通过名字来指定
x = ['aardvark','abalone','acme','add','aerate']
x.sort(key=len)
x
输出:
['add','acme','aerate','abalone','aardvark']

另一个关键字参数reverse是简单的布尔值(True或者是False)用来指明列表是否需要进行反向排序
x = [4,6,2,1,7,9]
x.sort(reverse=True)
x
输出:
[9,7,6,4,2,1]


cmp,key,reverse参数都是可以用于sorted函数。在多数情况下,为cmp或key提供自定义函数是非常有用的

元组:不可变序列

元组与列表一样,也是一种序列。唯一的不同是元组不能修改。
创建元组的语法很简单:如果你用逗号分隔了一些值,那么你就自动创建了元组。
1,2,3
(1,2,3)


元组也是通过圆括号括起来的:
(1,2,3)


空元组可以用没有包含内容的两个圆括号来表示:
()


那么如何实现包括一个值的元组呢。实现方法---必须价格逗号,即使只有一个值
42,

3*(40+2,)
输出:
(42,42,42)

1、tuple函数

tuple函数的功能与list函数基本上是一样的:以一个序列作为参考并把它转换为元组。如果参数是元组,那么该参数就会被原样返回
tuple([1,2,3])
输出:(1,2,3)
tuple('abc')
输出:('a','b','c')
tuple((1,2,3))
输出:(1,2,3)


新函数

cmp(x,y)比较两个值
len(seq)返回序列的长度
list(seq)把序列转换成列表
max(args)返回序列或者参数集合中的最大值
min(args)返回序列或者参数集合中的最小值
reversed(seq)对序列进行反向迭代
sorted(seq)返回已排序的包含seq所有元素的列表
tuple(seq)把序列转换成元组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: