python

python集合操作总结

Posted by 梦影无痕 on April 10, 2018

本文主要对Python中几种数据存储结构操作进行总结,包括元组,列表,字典和集

元组 Tuple

元组是一个或多个对象引用所组成的有序序列。元组是不可变的,因此,不能删除或替换元组中的元素,若需对其修改,可先将他转换为列表

构造元组

可以使用()创建元组,对于空元组:

empty=()

单个元素元组,需要使用逗号分隔符将与括号表达式进行区分

one=(‘xxxx’,) two=(11,)

多个元素,当元组中数据个数超过2个且无歧义时,可省略括号

items=’a’,’b’,’c’,’d’

元组可以嵌套使用:

items=((‘a’,1),(‘b’,2),(‘c’,3))

任何序列都可以作为参数传递给元组的构造函数,从而生成一个元组:

items = tuple(‘abcdefg’)

元组操作

元组可以直接使用下标访问

items[1]

对于嵌套元组,可以使用多个方括号访问

items[1][1]

可以使用 : 切片语法,此时元组内容已经改变,得到的元组是切片后的元组。

items[2:]

[2:] 表示获取最后两个元素

items[:2]

[:2] 表示获取前两个元素

items[:-1]

[:-1] 表示去除最后一个元素

可以使用len()函数获取元组长度:

len(items)

列表 List

列表类型是一个与元组类似的有序序列,元组中可以用到的函数和切片操作,列表也同样可以使用。列表与元组不同在于,列表是可变的。

构造列表

创建列表需要使用 [],对于空列表:

items = []

多个元素

items = [‘a’,’b’,’c’,’d’]

列表操作

类似的切片操作:

items[:2]

items[2:]

items[:-1]

可以在指定位置插入单个元素:

items.insert(5,’e’)

使用切片语法插入字符串:

items[4:4] = [‘abcd’]

删除元素:

del items[5]

del: 移除一个特定索引位置的元素

items.remove(‘a’)

remove: 移除一个与remove方法相匹配的元素

items[4:5]=[]

删除第五个元素

列表的常用函数

函数 说明
x in L x在L中
x not in L x不在L中
L+M 返回含L,M所有元素的列表
L.count(x) L中x出现的次数
L.index(x) L中最早出现x的索引位置
L.append(x) 在L尾端添加x
L.extend(M) 将M所有元素添加到L尾端,同”+”
L.pop() 弹出L尾端元素
L.pop(i) 弹出L中索引为i的元素
L.reverse() 逆序L中元素
L.sort() 排序

字典 dict

字典类型是一个数据字典,可以保存无序的键-值对,键(key)是唯一并且不可变的,可以是字符串、数字、元组。值(value)可以是任何数据类型。

创建字典

创建字典是使用 {key:value}

insects = {‘a’:1,’b’:2,’c’:3} insects[‘d’]=4

或者使用函数dict():

insects = dict(a=1,b=2,c=3)

操作

删除操作和列表相同:

del insects[‘a’] insects.pop(‘b’)

字典的常用函数

函数 说明
x in L x在L中
x not in L x不在L中
L.clear() 清空字典
L.copy() 浅复制
L.keys() 返回L中所有键
L.values() 返回L中所有值
L.items() 返回L中所有键值对
L.pop(k) 弹出L中键k的值,不存在时抛出异常
L.pop(k,x) 弹出L中键k的值,不存在时返回x
L.get(k) 返回L中键k的值,不存在返回None
L.get(k,x) 返回L中键k的值,不存在返回x
L.setdefault(k.x) k在L中,将键k的值设为x,否则插入{k:x}键值对

集 set

python有两种集:集(set)和原封集(frozenset),两者都是无序的,不同在于,集是可变的,可以对其中元素进行插入删除操作,原封集更时候做字典的键。 集和列表区别在于,集中的元素是唯一的,对集插入已存在的元素,集不会改变,而列表会保留元素插入的顺序。当两个集中所有元素都相同时,这两个集时相等的。

创建集

s = set(‘a’,’b’,’c’)

操作

添加

s.add(‘d’)

删除

s.remove(‘a’)

s.discard(‘a’)

s|t s.union(t)

s&t

s.interperset(t)

s-t

s.difference(t)

子集

s<=t #若s是t的子集,返回true

s.issubset #若s是t的子集,返回true

s>=t #若s时t的超集,返回true