第三章 Python 的容器: 列表、元组、字典与集合
列表是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]
第三章 Python 的容器: 列表、元组、字典与集合的更多相关文章
- python开发技巧---列表、字典、集合值的过滤
主要学习列表,字典,集合表达式的应用: 列表的解析式: 生成一个随机列表: In [4]: datalist = [randint(-10,10) for _ in range(10)] In [5] ...
- Day2 - Python基础2 列表、字典、集合
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
- Python初学笔记列表&元组&字典
一.从键盘获取 1 print("请输入") 2 username = input("姓名:") 3 age = input("年龄:") ...
- python基础之02列表/元组/字典/set集合
python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...
- python语言(二)列表、字典、集合、文件读写、关系测试
1.列表 list 代码 s = '王宇建,苏红,邹存才...' # 列表 数字 list l = ['王宇建','苏红','邹存才'] # 一维数组 二维数组 三维数组 # 0 1 2 # 索引 ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell ...
- python中列表 元组 字典 集合的区别
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...
- **python中列表 元组 字典 集合
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...
随机推荐
- RHEL7 单独安装图形 X11
RHEL7 默认是最小化安装(Minimal Install),没有图形界面, 我们应该选择Server with GUI.若已错过此步骤,我们采用以下方式补充安装GUI界面.
- ZOJ 3941 Kpop Music Party
先把能合并的区间都合并起来. 考虑最裸的贪心策略,从左到右一段一段的取. 但是,这样会有错,错在没有考虑每段区间选取最后一个点. 因为N只有10,所以枚举一下哪些区间最后一个点会被选择,然后按照最裸的 ...
- Codeforces#363 Div2
A题: 题意:给定一些数,给定一些往左走和往右走的操作,问是否能够相遇,如果相遇请求出相遇时间 分析:对于相邻两个数,如果大的往左,小的往右就能够相遇,否则不能相遇,在求出所有相遇当中的第一次相遇即可 ...
- Windwos下 php mysql apache 环境配置
一.下载所需软件: 1.安装Windows组件: 安装Apache的前 必须安装 VC11 vcredist_x86.exe (64位请下载vcredist_x64.exe),选择时尽量选择英文版 ...
- js中,怎么解决cookie里面中文乱码问题
呵呵,我查了百度和谷歌,都没找到解决方案,但是,最终直接结合两个函数就可以了,哈哈哈,开心ing function getCookie(name) { var prefix = name + &quo ...
- CoordinatorLayout学习笔记
CoordinatorLayout是一个增强型的FrameLayout.它的作用有两个 作为一个布局的根布局 最为一个为子视图之间相互协调手势效果的一个协调布局 代码如下: <?xml vers ...
- C语言-if语句
1.一般形式 if(表达式)表达式1 else 表达式2 :表达式成立(为真)则执行表达式1,否则执行表达式2. 适用范围:真假,对错,开关,对立面的条件 注意:如果if语句中只包括一条语句,可以 ...
- adapter中报错:Can't create handler inside thread that has not called Looper.prepare()
http://stackoverflow.com/questions/9357513/cant-create-handler-inside-thread-that-has-not-called-loo ...
- ECshop中的session机制理解
ECshop中的session机制理解 在网上找了发现都是来之一人之手,也没有用自己的话去解释,这里我就抛砖引玉,发表一下自己的意见,还希望能得到各界人士的指导批评! 此session机制不需 ...
- 安装pip工具
Python 2.7.9+ and 3.4+ Good news! Python 3.4 (released March 2014) and Python 2.7.9 (released Decemb ...