Python中三种重要的数据类型为:列表、元组、字典。下面比较一下三者的异同点。

1.列表

list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的。

举例说明一下list的主要函数应用:

list.append(x):  想列表的末尾添加一个对象,对象类型可以使整数,可以使字符。

list.extend(L): 这里的list为一个列表对象,L同样是列表对象,使用extend函数可以实现将L列表添加到list列表中的队尾。

list.insert(i, x):  在列表的指定位置i处,添加对象x

list.remove(x):  从list列表中移除对象x,如果找不到对象将会出现错误。 

list.pop([i]):  从list列表中删除下表为i的数据,下表必须要从0-len(list),否则会出错;另外,如果pop函数中没有指定下表,默认为最后一个对象。 如 list.pop(0) #删除第一个对象 list.pop() #删除最后一个对象

list.index(x):  在list列表中查找对象x,如果查找成功则返回该对象在列表中的下标位置。如果查找不到会出现错误。 例如:list.index(‘hehe’) #1

list.count(x):  在list列表中查找对象x,返回为查找到的个数;如果没有查找到结果,就你返回为0。

list.sort(cmp=None, key=None, reverse=False): 将list列表按照顺序排列,本身的数据相应地改变。 

list.reverse(): 将list列表中的数据对象倒序存储。 

索引和分片,赋值(单个元素赋值,分片赋值)

>>> l = ['abc', 'def', 'ghi', 123]         
>>> l[2]         
'ghi'         
>>> l[-3]         
'def'         
>>> l[:3]         
['abc', 'def', 'ghi']       
>>> l[1] = 'haha'      
>>> l      
['abc', 'haha', 'ghi', 123]      
>>> l[1:] = ['apple', 'banana']      
>>> l      
['abc', 'apple', 'banana']      
>>> l[2] = [123, 345, 456]      
>>> l      
['abc', 'apple', [123, 345, 456]]      
>>> l[1:] = [123, 234, 345, 456, 567]      
>>> l      
['abc', 123, 234, 345, 456, 567]



2.元组

笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。元组是python中内置的一种数据结构
元组是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为记录。

元祖和列表十分相似,不过元组是不可变的。即你不能修改元组。元组通过圆括号中用逗号分隔的项目定义。元组通常用在使语句或用户定义的函数能够安全的采用一组值的时候,即被使用的元组的值不会改变。元组可以嵌套。

>>> zoo=('wolf','elephant','penguin')
>>> zoo.count('penguin')
1
>>> zoo.index('penguin')
2

一个空的元组由一对空的圆括号组成,如 myempty = ()。然而,含有单个元素的元组必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象。

python中的元组有以下特性:

  • 任意对象的有序集合,数组的同性;
  • 通过偏移读取;
  • 一旦生成,不可改变;
  • 固定长度,支持嵌套。


3 字典

字典类似于你通过联系人名称查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。
键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。另外,记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺 序,那么你应该在使用前自己对它们排序。

以键值对的方式存在并操作,其特点如下:

  • 通过键来存取,而非偏移量;
  • 键值对是无序的;
  • 键和值可以是任意对象;
  • 长度可变,任意嵌套;
  • 在字典里,不能再有序列操作,虽然字典在某些方面与列表类似,但不要把列表套在字典上

1) 基本操作

python 代码

>>> table['abc']   1   >>> len(table)   3   >>> table.keys()   ['abc', 'ghi', 'def']   >>> table.values()   [1, 3, 2]   >>> table.has_key('def')   True  >>> table.items()   [('abc', 1), ('ghi', 3), ('def', 2)]


2) 修改,删除,添加

python 代码

>>> table = {'abc':1, 'def':2, 'ghi':3}   
>>> table['ghi'] = ('g', 'h', 'i')   
>>> table   
{'abc': 1, 'ghi': ('g', 'h', 'i'), 'def': 2}   
>>> del table['abc']   
>>> table   
{'ghi': ('g', 'h', 'i'), 'def': 2}   
>>> table['xyz'] = ['x', 'y', 'z']   
>>> table   
{'xyz': ['x', 'y', 'z'], 'ghi': ('g', 'h', 'i'), 'def': 2}  

在这里需要来一句,对于字典的扩充,只需定义一个新的键值对即可,而对于列表,就只能用append方法或分片赋值。

3)对字典的遍历

python 代码

>>> table = {'abc':1, 'def':2, 'ghi':3}   
>>> for key in table.keys():       
	<span style="white-space:pre">	</span>print key, '/t', table[key]            
abc     1   ghi     3   def     2 


实例:

#coding=utf-8
dict1={'zhang':'张家辉','wang':'王宝强','li':'李冰冰','zhao':'赵薇'}
#字典的操作,添加,删除,打印
dict1['huang']='黄家驹'
del dict1['zhao'] #删除key值为zhao的一项
for firstname,name in dict1.items():
    print firstname,name


结果:

li 李冰冰
wang 王宝强
huang 黄家驹
zhang 张家辉