python——序列 & 集合 & 映射
容器(列表 & 元组 & 字典 & 集合)
序列
序列:
    每个元素可以是任何类型(也可以是序列),每个元素被分配一个序号(从0开始)(序号,也叫索引,表示元素的位置)
Python中的序列: 元组,列表,字符串,Unicode字符串,buffer对象,range对象
- 元组和列表的本质区别是:列表是可以修改的而元组则不能。
 
序列的基本操作:
索引(类似于数学中集合的元素):返回序列中的元素
使用方法:$$序列[编号]$$
示例:
a=[1,2,3,4]
a[0]
1
a[-2]
3
切片(类似数学中集合的子集):返回子序列
使用方法:$$序列[开始编号:结束编号后一个:步长(默认为1)]$$
示例:
a=[1,2,3,4,5]
a[1:3]
[2, 3]
a[1:-1]
[2, 3, 4]
a[1:]
[2, 3, 4, 5]
a[:-1]
[1, 2, 3, 4]
a[:]
[1, 2, 3, 4, 5]
序列加(同类型的序列的拼接)
类似于$$一篮苹果+一篮香蕉=两篮水果$$
使用方法:$$序列+序列$$
示例:
a=[1,2,3]
b=[2,3,4]
a+b
[1, 2, 3, 2, 3, 4]
+  不会改变原有的序列
a
[1, 2, 3]
序列乘
类似于$$一个苹果n=n个苹果$$
使用方法:$$序列n(n表示重复次数)$$
示例:
a=[1,2,3]
a*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
in(类似于某个元素是否属于某个集合的判断)
使用方法:
a in 序列A
若\(a\in A\),则返回True,否则返回False。
len,max,min分别返回序列的长度,最大值,最小值
使用方法:
len(序列)
max(序列)
min(序列)
列表
列表的修改
示例:
a=[1,2,3,4]
a[0]=2
a
[2, 2, 3, 4]
a[1:3]=[5,6]
a
[2, 5, 6, 4]
a[1:3]=''
a
[2, 4]
a[0:0]=[99,88]
a
[99, 88, 2, 4]
a[1:3]=list('hello')
a
[99, 'h', 'e', 'l', 'l', 'o', 4]
del a[0]
a
['h', 'e', 'l', 'l', 'o', 4]
del a[0:3]
a
['l', 'o', 4]
列表方法
调用对象的方法:\(对象.方法(参数)\)
append方法
可以在列表的末尾追加新的元素:
a=[1,2,3]
a.append(4)
a
[1, 2, 3, 4]
a.append([1,5,'fr'])
a
[1, 2, 3, 4, [1, 5, 'fr']]
count方法
查看某个元素在列表中出现的次数:
a=[1,2,3,4,1,2]
a.count(1)
2
extend方法
使用其他列表拓展原有列表,其他列表的元素被添加到原有列表的末尾:
a=[1,2,3]
a.extend([4,5,6])
a
[1, 2, 3, 4, 5, 6]
index方法
返回某个元素的索引,如若此元素不存在,则会引发异常。
a=[1,2,3,45,5,45,7,84]
a.index(45)
3
insert方法
在序列的某个位置插入一个元素:
a=[1,2,3,4]
a.insert(2,'hello')
a
[1, 2, 'hello', 3, 4]
a.insert(20,'world')     #20号位置不存在,直接插到列表末尾
a
[1, 2, 'hello', 3, 4, 'world']
pop方法
移除列表某个位置的元素并返回该元素,如若没有指定要移除元素的位置,则默认移除末项。
a=[1,2,3,4]
a.pop()
4
a.pop(0)
1
remove方法
移除序列中第一个与参数匹配的元素:
a=[1,2,88,3,4,88,2]
a.remove(88)
a
[1, 2, 3, 4, 88, 2]
reverse方法
将列表改为倒序:
a=[1,2,3,4,2,5,3]
a.reverse()
a
[3, 5, 2, 4, 3, 2, 1]
sort方法
- 默认为升序:
 
a=[4,6,2,1,7,9,6]
a.sort()
a
[1, 2, 4, 6, 6, 7, 9]
- 参数:
 
key用来为每个元素提取比较值(默认值为None);
reverse为True时是反序(默认值为False)。
names=['Judy','Perter','Perkins']
names.sort(key=len)
names
['Judy', 'Perter', 'Perkins']
元组
"元组的不可修改"是指元组的每个元素指向永远不变:
b=('python','20150101',['a','b'])
b
('python', '20150101', ['a', 'b'])
b[2][0]='c'
b
('python', '20150101', ['c', 'b'])
b[2].append('d')
b
('python', '20150101', ['c', 'b', 'd'])
字典(dict/map)
形式:
{key:value,...}
字典的创建
以例子说明:
d={'wang':'111','U':'123'}
d
{'U': '123', 'wang': '111'}
d1=dict([('A',1),('B',2)])
d1
{'A': 1, 'B': 2}
d2=dict(A=1,B=2)
d2
{'A': 1, 'B': 2}
d3=dict(d2)
d3
{'A': 1, 'B': 2}
字典的操作
(通过键)查找,修改
示例:
d={'wang':'111','U':'123'}
d['U']
'123'
d['wang']=111
d
{'U': '123', 'wang': 111}
删除:del语句
del  字典[键]
len(字典)返回字典的项数
in(类似于序列的用法)
字典的方法
clear()
清除字典中所有的项
d={'wang':'111','U':'123'}
d.clear()
d
{}
复制copy()
浅复制,得到一个键的指向完全相同原字典的副本。
d={'wang':'111','U':[1,2,3,4]}
d1=d.copy()
d1
{'U': [1, 2, 3, 4], 'wang': '111'}
原地修改原字典d,相应的d1也会被修改,反之亦然。
d1['U'].append('lr')
d1
{'U': [1, 2, 3, 4, 'lr'], 'wang': '111'}
d
{'U': [1, 2, 3, 4, 'lr'], 'wang': '111'}
如果使用deepcopy()函数则可以避免上述情况发生。
d={'wang':'111','U':[1,2,3,4]}
from copy import deepcopy
d1=deepcopy(d)
d1
{'U': [1, 2, 3, 4], 'wang': '111'}
d1['U'].append('lr')
d1
{'U': [1, 2, 3, 4, 'lr'], 'wang': '111'}
d
{'U': [1, 2, 3, 4], 'wang': '111'}
get方法,查找元素
如若元素不存在,可以自定义返回的内容(默认为None):
d={}
d.get('name')
d['name']='Tom'
d
{'name': 'Tom'}
d.get('name')
'Tom'
d.get('phone','Unknown')
'Unknown'
setdefault方法,查找元素
与get方法不同的是,当键不存在时,自定义的值和该键会组成一个新项被加入字典。
d
{'name': 'Tom'}
d.setdefault('phone','119')
'119'
d
{'name': 'Tom', 'phone': '119'}
items(),keys(),values()均以列表的形式返回 a set-like object,其中的元素分别为"项","键","值"。
d={'wang':'111','U':[1,2,3,4]}
d.items()
dict_items([('wang', '111'), ('U', [1, 2, 3, 4])])
d.keys()
dict_keys(['wang', 'U'])
d.values()
dict_values(['111', [1, 2, 3, 4]])
pop(键)返回键对应的值,并删除字典中这个键对应的项
d={'wang':'111','U':[1,2,3,4]}
d.pop('U')
[1, 2, 3, 4]
d
{'wang': '111'}
popitem()随机返回字典中的项,并从字典中m删除
d={'wang':'111','U':[1,2,3,4]}
d.popitem()
('U', [1, 2, 3, 4])
d
{'wang': '111'}
update 使用新字典更新旧字典
新字典中有而旧字典中没有的项会被加入到旧字典中;
新字典中有而旧字典中也有的值会被新字典的值所代替。
d1={'n':'xx','p':'110'}
d2={'p':'120','a':'A'}
d1.update(d2)
d1
{'a': 'A', 'n': 'xx', 'p': '120'}
d2
{'a': 'A', 'p': '120'}
集合(类似于数学中集合的概念)
- set() 可变集合
 - frozen() 不可变集合
 
集合的元素必须是不可变对象(如字符串,元组等),且元素间有互异性。
set('Hello')
{'H', 'e', 'l', 'o'}
集合的基本操作
与序列一样拥有len(),min(),max()函数
add方法,添加元素
s=set(['Python','is','a','magic','language'])
print(s)
{'a', 'magic', 'Python', 'language', 'is'}
s.add('!')
s
{'!', 'Python', 'a', 'is', 'language', 'magic'}
也支持更新(update)
a=set([1,2,3,4])
b=set([3,4,5,6])
a.update(b)
a
{1, 2, 3, 4, 5, 6}
- remove方法删除集合中元素
 
s=set('hello')
s
{'e', 'h', 'l', 'o'}
s.remove('h')
s
{'e', 'l', 'o'}
使用remove方法,若元素不存在,则会引发错误,而discard则不会。
s.discard('om')
集合的特殊操作
等价(==) & 不等价(!=)
set('Python') == set('python')
False
set('Python') != set('python')
True
子集 & 超集
<,<=,>,>=   用来判断前面一个集合是否是后面一个集合的严格子集,子集,严格超集,超集
set('Hello') < set('HelloWorld')
True
set('Hello') <= set('Hello')
True
set('Hello') < set('Hello')
False
并(\(\bigcup\)) :使用  |
set('Hello') | set('world')
{'H', 'd', 'e', 'l', 'o', 'r', 'w'}
交(\(\bigcap\)):使用    &
set('Hello') & set('world')
{'l', 'o'}
差(-) :使用   -
set('Hello') - set('world')
{'H', 'e'}
对称差: 使用    ^
set([1,2,3,4])^set([3,4,5,6])
{1, 2, 5, 6}
Notes:
- 如是可变集合(set)与不可变集合 (frozenset)  进行运算,得到的新集合的类型与左操作数相同。
对于可变集合(set)可以进行就地修改:- 操作符为:
|=,&=,-=,^= 
 - 操作符为:
 - 集合只能包含不可变的 (即可散列的) 对象类型。
 
a=set('Hello')
a |= set('Python')
a
{'H', 'P', 'e', 'h', 'l', 'n', 'o', 't', 'y'}
a=set('Hello')
a &= set('Python')
a
{'o'}
a=set('Hello')
a -= set('Python')
a
{'H', 'e', 'l'}
a=set('Hello')
a ^= set('Python')
a
{'H', 'P', 'e', 'h', 'l', 'n', 't', 'y'}
b=set('Hello')|frozenset('Python')
b
{'H', 'P', 'e', 'h', 'l', 'n', 'o', 't', 'y'}
c=frozenset('Python')|set('Hello')
c
frozenset({'H', 'P', 'e', 'h', 'l', 'n', 'o', 't', 'y'})												
											python——序列 & 集合 & 映射的更多相关文章
- Python 序列与映射的解包操作
		
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
 - Python 序列与映射的解包操作-乾颐堂
		
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
 - python魔法方法、构造函数、序列与映射、迭代器、生成器
		
在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将 ...
 - 跟着ALEX 学python day3集合 文件操作  函数和函数式编程    内置函数
		
声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...
 - Python序列(Sequence)
		
Sequence是Python的一种内置类型(built-in type),内置类型就是构建在Python Interpreter里面的类型,三种基本的Sequence Type是list(表),tu ...
 - [Python笔记][第二章Python序列-tuple,dict,set]
		
2016/1/27学习内容 第二章 Python序列-tuple tuple创建的tips a_tuple=('a',),要这样创建,而不是a_tuple=('a'),后者是一个创建了一个字符 tup ...
 - Python序列类型
		
Python序列类型 序列:字符.列表.元组 所有序列都支持迭代 序列表示索引为非负整数的有序对象集合 字符和元组属于不可变序列,列表可变 1)字符 字符串字面量:把文本放入单引号.双引号或三引号中: ...
 - Hibernate  集合映射 一对多多对一 inverse属性 +  cascade级联属性  多对多 一对一 关系映射
		
1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...
 - Python的集合
		
1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...
 
随机推荐
- JS数组及内置对象
			
[JS中的数组]1.数组的概念:数组是在内存中连续存储多个有序元素的结构元素的顺序,称为下标,通过下标查找对应元素.2.数组的声明: ① 字面量声明: var arr1 = [];JS中同一数组,可以 ...
 - sqlserver 处理百万级以上的数据处理与优化
			
一处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应 ...
 - 微信小程序多宫格抽奖
			
最近闲来无事,做了一个多宫格抽奖的例子,有什么需要改进或者错误的地方,请留言,谢谢 首先看效果 思路是先让其转动2圈多,然后再进行抽奖,格子运动用的是setTimeout,让其运行的时间间隔不一样,然 ...
 - TCP传输协议使用
			
TCP传输协议,也称之为套接字连接,比较安全,三次握手!,必须确保对方计算机存在,才能连接,而且是长时间连接. 缺点是传输速度有点慢. 你用 socket 去连接 ServiceSocaket 服务器 ...
 - Ubuntu tty中文字符乱码
			
默认的tty只能显示一个字节,我们可以用setfont命令去改tty字体,但仅仅局限在一个字节内,不支持UTF-8多字节,所以我们就没办法使用汉字.但是我们可以使用FbTerm啊!FbTerm是支持中 ...
 - vue数据绑定原理
			
一.定义 vue的数据双向绑定是基于Object.defineProperty方法,通过定义data属性的get和set函数来监听数据对象的变化,一旦变化,vue利用发布订阅模式,通知订阅者执行回调函 ...
 - hdu_5964:平行四边形
			
打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...
 - 【tyvj1463】智商问题 [分块][二分查找]
			
Background 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! Description 某个同学又有很多小姊妹了他喜欢聪明的小姊妹 所以经常用神奇的函数来估算小姊妹的智商他得出了自己所有 ...
 - Openfire3.9.1+jdk1.7导入到eclipse中
			
Openfire3.9.1+jdk1.7导入到eclipse中 写这篇文章,也是记录一下自己几晚上的辛苦,因为作为新手在网上看了很多的资料,但是按照他们的我总是出不来,跟他们描述的不一致,可能是环境问 ...
 - CODE大全——机器学习
			
聚类 聚类任务 背景 在无监督学习(密度估计.异常检测等)中,训练样本的标记信息是未知的(即不人为指定),旨在发现数据之间的内在联系和规律,为进一步的数据分析提供基础. 此类学习任务中研究最多.应用最 ...