列表是Python的6种内建序列(列表,元组,字符串,Unicode字符串,buffer对象,xrange对象)之一,
列表内的值可以进行更改,操作灵活,在Python脚本中应用非常广泛
列表的语法格式
文本格式:
[ ‘元素1’,‘元素2’,‘元素3’,……,‘元素n’]
如:
['to','be','or','not','to','be']
数字格式:
[数字1,数字2,数字3,数字n]
如:
[1,20,15,]
在需要操作一组数值的时候,序列很好用。
可以通过序列表示数据库中一个人的信息——第一个元素是姓名,第二个元素是年龄。
根据上述内容编写一个列表
>>> zhangsan = ['zhangsan',18]
>>> lisi = ['lisi',19]
列表中可以嵌套列表,准确的说,列表中可以包含任意的数据类型(字符串、列表、元组、集合)
>>> database=[zhangsan,lisi]
>>> database
[['zhangsan', 18], ['lisi', 19]]
使用 list()函数也可以创建列表
从元组中创建列表
>>> hero =('Zhongkui','Anqila','Houyi','Xiaoqiao')
>>> list(hero)
['Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao']
从字符串创建列表
>>> list('cat')
['c', 'a', 't']
>>>
使用以下方法可以创建空列表
>>> empty_list = []
>>> empty_list
[]
>>> another_empty_list = list()
>>> another_empty_list
[]
>>>
列表索引和分片
索引、分片和上一章字符串的索引是一样的,不同之处是字符串的一个索引是当字符,而列表的索引是列表中的一个元素
也就是,列表中一对单引号中的数据
>>> hero
('Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao')
>>> hero_list = list(hero)
>>> hero_list
['Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao']
>>> hero_list[0::2]
['Zhongkui', 'Houyi']
>>>
列表的操作
列表的基本操作
元素赋值
>>> x = [1,1,1]
>>> x[1] = 2
>>> x
[1, 2, 1]
删除元素
>>> provinces
['HeNan', 'HeBei', 'ShanDong', 'ShanXi', 'HuNan', 'HuBei', 'Jiangxi', 'Afuhan']
>>> del provinces[-1]
>>> provinces
['HeNan', 'HeBei', 'ShanDong', 'ShanXi', 'HuNan', 'HuBei', 'Jiangxi']
分片赋值
>>> num = [1,2,3,4,5]
>>> num[3:] = [6,7]
>>> num
[1, 2, 3, 6, 7]
插入新元素
>>> num[3:3] = [4,5]
>>> num
[1, 2, 3, 4, 5, 6, 7]
分片删除
>>> del num[1:4]
或
>>> num[1:4] = []
>>> num
[1, 5, 6, 7]
列表的方法
1)追加append
>>> num = [1,2,3]
>>> num.append(4)
>>> num
[1, 2, 3, 4]
2)统计次数count
>>> ['to','be','or','not','to','be'].count('to')
2
3)在列表末尾一次性追加另一个列表的多个值extend
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b[1:3])
>>> a
[1, 2, 3, 5, 6]
4)显示列表中某个值第一个匹配项的索引位置index
>>> aaa = ['Today','is','a','nice','day']
>>> aaa.index('nice')
3
5)将对象插入到列表中insert
>>> num = [1,2,3,4,5,6]
>>> num.insert(3,'four')
>>> num
[1, 2, 3, 'four', 4, 5, 6]
6)移除列表中的一个元素(默认是最后一个),并且返回该元素的值
>>> x = [1,2,3]
>>> x.pop()
3
7)移除列表中某个值的第一个匹配项remove
>>> x = ['to','be','or','not','to','be']
>>> x.remove('be')
8)将列表中的元素反向存放reverse
>>> x
['to', 'or', 'not', 'to', 'be']
>>> x.reverse()
>>> x
['be', 'to', 'not', 'or', 'to']
9)排序sort和sorted
>>> x = [3,7,4,64,23,71,2]
>>> x.sort()
>>> x
[2, 3, 4, 7, 23, 64, 71]
>>> sorted(x)
[2, 3, 4, 7, 23, 64, 71]
两者的区别在于sort不返回生成的列表值,sorted返回列表值
元组
创建元组
元组和列表一样,也是一种序列。唯一的不同是元组不能修改。
语法
(元素1,元素2,……,元素n)
空元组可以用没有包含内容的两个圆括号来表示
()
如果要创建包括一个值的元组,必须加上逗号
(42,)
加上逗号和不加逗号代表的含义完全不同
>>> 3*(42)
126
>>> 3*(42,)
(42, 42, 42)
可以一次性将元组赋值给多个变量
>>> marx_tuple = ('Goucho','Chico','Harpo')
>>> a,b,c = marx_tuple
>>> a
'Goucho'
>>> b
'Chico'
>>> c
'Harpo'
>>>
有时候,这个过程被成为元组解包
tuple() 函数和之前提到的 list() 一样,可把其他类型的数据转换为元组
>>> tuple('cat')
('c', 'a', 't')
>>> tuple(hero_list)
('Zhongkui', 'Anqila', 'Houyi', 'Xiaoqiao')
>>>
字典
在Python中通过字典可以通过查找某个特定的键,从而找到它的值
6.1字典的创建
6.1.1语法格式
{‘a’:123,‘b’:234,‘c’:345,……}
例:
>>> {'zhongkui':1511,'houyi':1509,'xiguatian':1508}
{'zhongkui': 1511, 'houyi': 1509, 'xiguatian': 1508}
将字典赋值给一个变量可以实现轻松查找
>>> shark = {'zhongkui':1511,'houyi':1509,'xiguatian':1508}
>>> shark['xiguatian']
1508
注:在字典中的键是唯一的,而值并不唯一
6.1.2通过dict函数创建字典
>>> Iphone = ('Iphone',5999)
>>> LV = ('LV',999)
>>> item = [Iphone,LV]
>>> d = dict(item)
>>> d
{'LV': 999, 'Iphone': 5999}
如果现在商场进了一批红塔山,通过dict可以快速添加字典里
>>> Hongtashan = ('Hongtashan',7)
>>> item
[('Iphone', 5999), ('LV', 199999), ('Hongtashan', 7)]
>>> d = dict(item)
>>> d
{'LV': 199999, 'Iphone': 5999, 'Hongtashan': 7}
通过dict方便对字典内容进行更新
4.2字典的基本操作
字典的基本行为在很多方面与序列类似
假设现在有个字典名为d
len(d)返回字典d中项(键-值对)的数量
d[]返回关联到键上的值
d[a]=b将值b关联到键a上
deld[k]删除键为k的项
k in d检查d中是否有含有键为k的项
>>> d
{'LV': 999, 'QiaQia': 9, 'Iphone': 5999}
>>> len(d)
3
>>> d['LV']
999
>>> d['LV']=1000
>>> d
{'LV': 1000, 'QiaQia': 9, 'Iphone': 5999}
>>> del d['LV']
>>> d
{'QiaQia': 9, 'Iphone': 5999}
>>> 'QiaQia' in d
True
字典在脚本中的使用
创建一个小程序,查询公司内部员工的个人信息
[root@shark163 ~]# vim people.py
#!/usr/bin/python
people = {
'mv':{
'phone': '2341',
'addr': 'BeiJing'
},
'xiguatian': {
'phone': '9102',
'addr': 'HeBei'
},
'houyi':{
'phone': '3158',
'addr': 'ShanDong'
},
'libai':{
'phone': '4556',
'addr': 'ShanXi'
}
}
[root@shark163 ~]# vim phone.py
#!/usr/bin/python
#coding=utf-8
import people
people = people.people
#变量名 模块名 模块中定义的字典名
labels = {
'phone': 'phone number',
'addr': 'address'
}
while True:
name = raw_input('Name: ')
while name in people:
request = raw_input('Phone number (p) or address (a)?')
if request == 'p' : key = 'phone'
if request == 'a' : key = 'addr'
print "%s's %s is %s." % \
(name, labels[key], people[name][key])
break
else:
YN = raw_input("The user does not exist,enter username again?(Y/N)")
if YN == 'N' :
print "Program is stopping!!!"
break
if YN == 'Y' : continue
执行结果:
[root@localhost ~]# python phone.py
Name: xiguatian
Phone number (p) or address (a)?a
xiguatian's address is HeBei.
Name: rn
The user does not exist,enter username again?(Y/N)N
Program is stopping!!!
6.3字典的方法
1)清空字典中的所有项clear
>>> example = {'zhongkui':1511,'houyi':1509,'xiguatian':1508,'libai':1506}
>>> example
{'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
>>> example.clear()
>>> example
{}
>>> example = {}
2)创建一个具有相同项的新字典copy
>>> y = example.copy()
>>> y
{'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
3)根据给定的键创建一个空值的字典froxiguatianeys
>>> {}.froxiguatianeys(['mv','yum'])
{'mv': None, 'yum': None}
默认的空值为None也可以用以下方法手动指定
>>> {}.froxiguatianeys(['mv','yum'],'(unknown)')
{'mv': '(unknown)', 'yum': '(unknown)'}
4)访问空值,不报错,返回None值get
>>> example = {'zhongkui':1511,'houyi':1509,'xiguatian':1508,'libai':1506}
>>> print example.get('mv')
None
5)检查字典中是否包含特定键has_key,表达式d.has_key(k)等同于k in d
>>> example
{'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
>>> example.has_key('mv')
False
6)以列表的方式返回字典中的所有项items
>>> example.items()
[('zhongkui', 1511), ('libai', 1506), ('houyi', 1509), ('xiguatian', 1508)]
与items相似的有iteritems方法,区别在于item返回的是一个列表,iteritems返回一个迭代器,方便对其调用
>>> it = y.iteritems()
>>> list(it)
[('zhongkui', 1509), ('libai', 1506), ('houyi', 1508), ('xiguatian', 1504)]
7)将字典中的键以列表方式返回keys,而iterkeys则返回针对键的迭代器
>>> example
{'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
>>> example.keys()
['zhongkui', 'libai', 'houyi', 'xiguatian']
>>> a = example.keys()
>>> list(a)
['zhongkui', 'libai', 'houyi', 'xiguatian']
8)获取给定键的值,并将此项从字典中移除pop
>>> example
{'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
>>> example.pop('zhongkui')
1511
>>> example
{'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
9)随机移除列表中的项popitem
>>> example.popitem()
('libai', 1506)
10)用一个字典更新另一个字典update
>>> example
{'xiguatian': 1508}
>>> shark = {'zhongkui':1511,'houyi':1509,'libai':1506}
>>> example.update(shark)
>>> example
{'zhongkui': 1511, 'libai': 1506, 'houyi': 1509, 'xiguatian': 1508}
11)以列表的方式返回字典中的值values,返回值的迭代器itervalues
>>> example.values()
[1511, 1506, 1509, 1508]
>>> a =example.itervalues()
>>> list(a)
[1511, 1506, 1509, 1508]