python数据结构

数据结构是一种结构,它们用以把一些数据存储在一起。在python中有三种内建的数据结构:列表(list)、元组(tuple)、字典(dictionary)。

1、列表

列表由一对方括号括起来,其中的项目之间以逗号分隔。你可以在列表中增加、删除、查寻项目。
示例如下:
				
#!/usr/bin/python
# Filename: using_list.py

#定义一个列表函数
def listshop(xshoplist):
for xitem in xshoplist:
print xitem,
# 一个商品列表
shoplist = ['苹果', '桔子', '芒果', '香蕉']
print '这儿有', len(shoplist), '种水果.'
print '它们是:', # 注意这里的逗号
listshop(shoplist)
print '/n再加一种水果西瓜.'
shoplist.append('西瓜')
print '列出现在的水果', listshop(shoplist)

print '给它们排个序'
shoplist.sort()
print '列出排序后的水果', listshop(shoplist)

print '排在列表中第一的水果是', shoplist[0]
olditem = shoplist[0]
del shoplist[0]#删除列表中的第一个项目
print '买掉这第一个水果', olditem
print '列出现在的水果', listshop(shoplist)
运行输出如下:

$ python using_list.py
这儿有 4 种水果.
它们是: 苹果 桔子 芒果 香蕉
再加一种水果西瓜.
列出现在的水果 苹果 桔子 芒果 香蕉 西瓜 None
给它们排个序
列出排序后的水果 桔子 芒果 苹果 西瓜 香蕉 None
排在列表中第一的水果是 桔子
买掉这第一个水果 桔子
列出现在的水果 芒果 苹果 西瓜 香蕉 None

说明:
1、shoplist = ['苹果', '桔子', '芒果', '香蕉']定义了一个由商品名称构成的一个名为shoplist的列表。列表中的元素可以是任何对象。在Python中一切都是对象。
2、print语句中的逗号的作用是禁止自动换行。
3、shoplist.append('西瓜')的append是列表对象的一个方法,用以为列表增加一个项目。
4、shoplist.sort()为列表中的项目排序。
5、shoplist[0]引用列表中的第一个元素。列表中元素的索引值从左到右由0开始。
6、del shoplist[0]删除列表中的第一个元素。del是列表的删除方法。

2、元组

元组由一对圆括号括起来,其中的项目之间以逗号分隔,元组中的元素可以是任何对象。元组是不可变的,你不要试图改变其中的元素。
示例如下:
例1:
#!/usr/bin/python
# Filename: using_tuple.py

zoo = ('wolf', 'elephant', 'penguin')#建立一个名为zoo的元组
print 'zoo 中的元素的数量是:', len(zoo)
#len是元组的方法,用以得到其中的元素个数
new_zoo = ('monkey', 'dolphin', zoo)
print ' new_zoo 中的元素的数量是:', len(new_zoo)
print 'new_zoo 中的动物有', new_zoo
print '来自zoo中的动物有', new_zoo[2]#引用第三个元素zoo,也是一个元组
print 'zoo中最后一个动物是', new_zoo[2][2]#引用元组zoo的第三个元素
运行输出如下:

$ python using_tuple.py
zoo 中的元素的数量是: 3
new_zoo 中的元素的数量是:3
new_zoo 中的动物有 ('monkey', 'dolphin', ('wolf', 'elephant', 'penguin'))
来自zoo中的动物有('wolf', 'elephant', 'penguin')
zoo中最后一个动物是 penguin

例2:
#!/usr/bin/python
# Filename: print_tuple.py

age = 22
name = 'pythontik'

print '%s is %d years old' % (name, age)
#格式化打印,我们经常这样使用元组
#name对应%s(字符串),age对应%d(整数);必须一一对应
print 'Why is %s playing with that python?' % name
运行输出如下:

$ python print_tuple.py
pythontik is 22 years old
Why is pythontik playing with that python?

3、字典

字典是由花括号括起来的键值对。键值对是由 名字:值 构成,键值对之间由逗号分隔;名字是不可变且唯一的,名字和值是一对一的关系,我们可以通过名字来访问它的值。
示例如下:
#!/usr/bin/python
# Filename: using_dict.py

#下面建造一个字典pythontik

pythontik = { 'zhao': 'zhao@pythontik.com',
'qian': 'qian@pythontik.com',
'shun': 'shun@pythontik.com',
'li' : 'li@pythontik.com'
}
print "zhao's address is %s" % pythontik['zhao'] #在字典pythontik中添加一个键值对'zhou':'zhou@pythontik.com' pythontik['zhou'] = 'zhou@pythontik.com' #用del方法删除一个键值对'shun':'shun@pythontik.com' del pythontik['shun'] print '/nThere are %d contacts in the address-book/n' % len(pythontik) for name, address in pythontik.items(): print 'Contact %s at %s' % (name, address) if 'zhou' in pythontik: # 或 pythontik.has_key('zhou') print "/nzhou's address is %s" % pythontik['zhou']
运行输出如下:

$ python using_dict.py
zhao's address is zhao@pythontik.com
There are 4 contacts in the address-book
Contact zhao at zhao@pythontik.com
Contact qian at qian@pythontik.com
Contact zhou at zhou@pythontik.com
Contact li at li@pythontik.com
zhou 's address is zhou@pythontik.com

4、序列

列表、元组和字符串都是序列,序列有两个主要的特点:索引操作和切片操作。我们可以通过索引操作直接访问序列中的某一值;通过切片操作来检索序列中的某一部份。
示例如下:
#!/usr/bin/python
# Filename: seq.py

shoplist = ['apple', 'mango', 'carrot', 'banana']

# 以下是索引操作
print 'Item 0 is', shoplist[0]
print 'Item 1 is', shoplist[1]
print 'Item 2 is', shoplist[2]
print 'Item 3 is', shoplist[3]
print 'Item -1 is', shoplist[-1]
print 'Item -2 is', shoplist[-2]

#列表中的切片操作
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]

#字符串的切片操作
name = 'swaroop'
print 'characters 1 to 3 is', name[1:3]
print 'characters 2 to end is', name[2:]
print 'characters 1 to -1 is', name[1:-1]
print 'characters start to end is', name[:]
运行输出如下:

$ python seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
characters start to end is swaroop

5、引用

当我们创建了一个对象并把它赋给(=)一个变量后,这个变量就指向了这个对象,也就是说它指向了存储这个对象的内存区域。但如果我们用切片的方法来复制给变量的话,那它们之间是不会互相影响的,各有各的内存区域。
示例如下:
#!/usr/bin/python
# Filename: reference.py

print 'Simple Assignment'
shoplist = ['apple', 'mango', 'carrot', 'banana']
mylist = shoplist # 将对象赋给变量

del shoplist[0] #从列表中删除第一个元素
print 'shoplist is', shoplist
print 'mylist is', mylist
#以上两句的输出是相同的
print 'Copy by making a full slice'
mylist = shoplist[:] #切片后复制给变量
del mylist[0] # 删除第一个元素
print 'shoplist is', shoplist
print 'mylist is', mylist
# 以上两句的结果是不同的
输出如下:

$ python reference.py
Simple Assignment
shoplist is ['mango', 'carrot', 'banana']
mylist is ['mango', 'carrot', 'banana']
Copy by making a full slice
shoplist is ['mango', 'carrot', 'banana']
mylist is ['carrot', 'banana']

 

本系列的文章来源是http://www.pythontik.com/html,如果有问题可以与那里的站长直接交流。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值