9. 数据结构
来源:互联网 发布:易语言辅助源码 编辑:程序博客网 时间:2024/06/05 09:39
所谓数据结构其实就是用来存储数据的一种结构方式。其中最常用就是字符串。之前就讨论过字符串,字符串就是一连串字符所组成的一个序列。在python中的序列主要有两个特点,一个是索引操作,也就是下标操作。另一个是切片操作。
下标操作就是取整个序列中某一个位置的操作,假如这个字符串长为len,那么这个字符串的下标是从0开始一直到len - 1。想知道怎么进行下标操作还是来看例子吧:
#!/usr/bin/pythons = 'this is a string'print 'index 0 is', s[0] # tprint 'index 1 is', s[1] # hprint 'index -1 is', s[-1] # gprint 'index -4 is', s[-4] # r
显示:
index 0 is t
index 1 is h
index -1 is g
index -4 is r
怎么还有负数?负数是什么?吼吼,python还是很犀利的,它就是那么犀利,支持负数,在一个有N个元素的序列中是这样的:
自己用画图做的,不小心做大了,不过就是这么回事了。下标还是很简单的,那么切片呢?神马是切片啊?切片其实就是通过下标操作来截取一段该序列的子序列,因为是子序列,当然是一头一尾啦,所以只要通过一头一尾两个下标就行了,在两个下标中使用分号分开。接着看例子吧:
#!/usr/bin/pythons = 'this is a string'print 'sub 1:', s[3:6] # s iprint 'sub 2:', s[-8:-1] # a strinprint 'sub 3:', s[2:-2] # is is a striprint 'sub 4:', s[:4] # thisprint 'sub 5:', s[-2:] # ngprint 'sub 6:', s[:] # this is a string显示:
sub 1: s i
sub 2: a strin
sub 3: is is a stri
sub 4: this
sub 5: ng
sub 6: this is a string
这是不是很犀利啊,在python中的操作中都是前闭后开的区间,这一点很重要。如果前面的下标没有给出则默认为0,如果后面的下标没给出则默认为最后。根据前面的索引操作其实切片操作是很后理解的。
好了,改换台了,我们将目光集中到另外一个python中超级常用的数据结构——列表,列表时使用方括号包含、用逗号分隔数据的数据结构,与其他语言的数组十分相似,最大的不同在于python中的列表可以包含不同的数据类型,包括他们自己,而其他的大多数语言的数组只能由同类型组成。由于列表也是序列,因此列表也支持索引和切片操作,不过每个下标元素不在像字符串中一样是字符(严格来说并不是字符,而是长度为1的字符串),而是数据本身,还是看例子吧,我看书就喜欢看例子:
#!/usr/bin/pythonls = ['this', 'is', 'a', 'list']for i in range(0, len(ls)): print ls[i]for i in ls: print i显示:
this
is
a
list
this
is
a
list
切片操作我并没有演示,我想有了下标操作切片操作不是问题。我们还看到了另一种遍历的方式,i会不停的迭代ls中的元素。
如果在列表中有你想删除的元素请使用del语句,例如:del ls[0]。对于列表还有两个操作很重要,一个是append函数,另一个是extend函数。我们先看看append函数,这个函数是向列表后面添加一个元素,这个元素就是append函数的参数;extend函数则是对列表的扩充,将元素加在列表的后面。就这样看似乎没有什么区别啊?还是看例子吧:
#!/usr/bin/pythonls = ['this is a list']another_ls = ['another list']print lsls.extend(another_ls)print ls #['this is a list', 'another list']del ls[1]ls.append(another_ls)
print ls #['this is a list',['another list']]
显示:
['this is a list']
['this is a list', 'another list']
['this is a list', ['another list']]
再换个频道,该看看元组了,元组就是把列表的中括号换成小括号,值得注意的是,定义单个元素的元组的时候,必须要带上逗号,不然的话你无法判断是否是元组,有可能当作一个变量或常量加上了括号而已。而且元组也是不可变的,也就是说元组中的数据是只读的,而且,元组是完全没有内建的函数的,例如append。元组使用比较多的应该就是用于输出吧,还记得之前的sayHi函数吗?那个输出看的是那么的不尽如人意,那么我们来改善一下吧:
#!/usr/bin/pythondef sayHi(name = ''): print 'Hello %s!' % namesayHi('L')
显示:
Hello L!
是不是觉得看的爽多了啊。再来看一个更完整的例子吧:
#!/usr/bin/pythonage = 21name = 'L'print '%s is %d years old' % (name, age)
其实也很简单,用了跟字符串中的转义符类似的方法,用百分号加上一个字母类表示输出的类型,然后在后面的元组中寻找对应的变量或常量的值来替代,在输出的字符串和元组中间同样使用百分号将其分隔开。
再换个台,该讲字典了。字典是一个比较特殊的数据结构,不想之前介绍的那些数据结构,每个元素都是独立出现的,在字典中,元素是成对出现的。没错就是成对,一个键值对。这可能也是为什么要称作字典的原因吧,因为我们要通过给定的关键字——键——来查找对应的数据——值,因此字典这种数据结构有时也会替代类似C语言中的switch语句。那么看看怎么定义吧:d = {key1 : value1, key2 : value2...},最后是我最喜欢的部分——例子:
#!/usr/bin/python# 'ab' is short for 'a'ddress'b'ookab = { 'Swaroop' : 'swaroopch@byteofpython.info', 'Larry' : 'larry@wall.org', 'Matsumoto' : 'matz@ruby-lang.org', 'Spammer' : 'spammer@hotmail.com' }print "Swaroop's address is %s" % ab['Swaroop']# Adding a key/value pairab['Guido'] = 'guido@python.org'# Deleting a key/value pairdel ab['Spammer']print '\nThere are %d contacts in the address-book\n' % len(ab)for name, address in ab.items(): print 'Contact %s at %s' % (name, address)if 'Guido' in ab: # OR ab.has_key('Guido') print "\nGuido's address is %s" % ab['Guido']显示:
Swaroop's address is swaroopch@byteofpython.info
There are 4 contacts in the address-book
Contact Swaroop at swaroopch@byteofpython.info
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org
Contact Guido at guido@python.org
Guido's address is guido@python.org
我们可以使用in操作符来检验一个键/值对是否存在,或者使用dict类的has_key方法。具体帮助使用help函数吧。
最后在来看看引用吧,当你创建一个对象并给它赋一个变量的时候,这个变量仅仅引用那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。当你赋值就会重新绑定,这也是为什么在python通过变量之间的传值无法实现像C语言中的swap函数。
- 9. 数据结构
- 9.数据结构
- 9.第一章---数据结构绪论
- 数据结构9.哈希表
- 9.数据结构(2)
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- ItemsControl A~Z----深入了解ItemsControl
- 想写点,无奈刚入门,。。。酝酿中。。。
- A是功能丰富
- sharc21479 uart总结
- 用表驱动代替switch-case
- 9. 数据结构
- Android 图像处理(类型转换,比例缩放,倒影,圆角)
- 帕累托最优
- 毕业彩排 & 歌曲 星星的眼睛 毕业歌
- 1. A bad begging makes a bad ending. 不善始者不善终
- 深思的夜晚
- 自己有用的链接
- 魔方比赛
- Heartbeat+DRBD+mysql的配置过程