1.关于list的一些基本用法
# 创建没有初值的列表 list1=[] # 创建有初值的列表 list2=['this','is','a','list'] # 创建给定长度但初值不确定的列表 list3=[0 for x in range(4)] # len()函数用于获取列表的长度 print(len(list1)) print(len(list2)) # 索引用来访问列表 print(list2[0]) print(list2[-1]) # -1用于查询最后一个元素 # 往列表末尾追加元素 list1.append('element') # 往列表指定位置添加元素 list2.insert(1,'insert at 1') # 删除列表末尾元素,用pop()方法 list2.pop() # 删除列表指定位置的元素,用pop(i)方法 list2.pop(1) # 列表中的元素的数据类型可以不同 list3[0]='string' list3[1]=2 list3[2]=True list3[3]=['this','is','a','sublist'] print(list3)
# 合并两个list list1=[1,2,3] list2=[4,5,6]
print(list1+list2) # 输出:[1, 2, 3, 4, 5, 6] print(list2+list1) # 输出:[4, 5, 6, 1, 2, 3]
list1.extend(list2) print(list1) # 输出:[1, 2, 3, 4, 5, 6]
# 翻转列表
list1.reverse()
2.关于tuple的一些知识
# tuple是另一种有序列表,叫元组。与list不同的是,tuple一旦初始化就不能修改 # 也就是说tuple没有append(),insert()这些方法,也不能根据索引赋值。 # tuple增加了代码的安全性。 # 空tuple tuple1=() # 只有一个元素的tuple要写成如下样子 tuple2=(1,) # tuple中的元素的数据类型也不需要是相同的 tuple3=('a',1,['this','is','a','list']) # 因为tuple3中第二个元素是一个列表,因此可以更改该列表的值 tuple3[2][0]='that' print(tuple3) # 输出:('a', 1, ['that', 'is', 'a', 'list'])
3.关于dict的一些知识
# 创建空字典 dict1=dict() # 创建非空字典 dict2={'a':1,'b':2} # 插入数据 dict1['a']=3 # 查找数据 dict1['a'] # 但是这种方法当key不存在时会报错。为解决该问题,可以先判断key是否存在: if 'a' in dict1: print(dict1['a']) # 或者用get()方法 dict1.get('b') dict1.get('b',-1) # 指定当key不存在时返回的结果 # 用pop()方法删除key-value对 dict2.pop('a') # 需要注意的是key必须是不可变对象,即list不能作为key,可以先把list转成tuple。
4.关于set的一些知识:
# set与dict类似,也是一组key的集合,但是不存储value。由于key不能重复,set中没有重复的key。 # 创建set,需要提供一个list作为输入集合,重复的元素将自动被过滤掉 set1=set([1,2,3,1,2,4]) # 输出:{1, 2, 3, 4} # 使用add(key)向set中添加元素。 set1.add(5) # remove(key)用于删除元素 set1.remove(1) # 两个set的交集和并集 set2=set([2,3,4,5,6]) set3=set1&set2 # 输出:{2, 3, 4, 5} set4=set1|set2 # 输出:{2, 3, 4, 5, 6}
5.Python Collections模块
该模块实现特定目标的容器,提供python标准内建容器dict, list, set, tuple的替代选择。
Counter
# Counter是字典的一个子类,提供了可哈希对象的计数功能 import collections # 统计字符出现的次数,输出:Counter({'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}) a=collections.Counter('hello world') # 统计单词数,输出:Counter({'hello': 3, 'world': 2, 'china': 1}) c=collections.Counter('hello world hello world hello china'.split()) # 获取指定对象的访问次数,以下两种均可 c['hello'] c.get('hello') # 查看元素,输出:['hello', 'hello', 'hello', 'world', 'world', 'china'] list(c.elements()) # 查看n个访问频率最高的元素和计数,输出:[('hello', 3), ('world', 2)] c.most_common(2) # 追加对象 d=collections.Counter('hellow world'.split()) c+d # 或者用c.update(d) c-d # 或者用c.subtract(d) # 清除 c.clear()
defaultdict
# defaultdict(default_factory)给不存在的key一个默认的初始值 import collections # 不存在的key的默认初始值都是空列表 dict1=collections.defaultdict(list) print(dict1['a']) # 输出:[] # 不存在的key默认初始值都是0 dict2=collections.defaultdict(int) print(dict2['a']) # 输出:0 # 不存在的key默认值初始值都是空字符串 dict3=collections.defaultdict(str) print(dict3['a']) # 输出空字符串 # 使用匿名函数指定默认值,因为defaultdict接受的参数default_factory就是一个函数对象 dict4=collections.defaultdict(lambda:'no key') print(dict4['a']) # 输出:no key # 或者定义一个函数,用来指定默认值 def get_default(): return 'default value' dict5=collections.defaultdict(get_default) print(dict5['a']) # 输出:default value
OrderedDict:key保留顺序的字典,但是python3.7后普通的字典也能保留顺序。根据官方文档,OrderedDict与普通dict的区别在于:
1.普通dict被设计为非常擅长映射操作,跟踪插入顺序是次要的。
2.OrderedDict擅长重新排序操作。
等等等等,因为这个我不常用,所以没有仔细看。
namedtuple
# namedtuple 命名元组,赋予每个位置一个含义,提供可读性和自文档性。 import collections Point=collections.namedtuple('Point',['positionx','positiony']) p=Point(11,positiony=22) q=Point(positiony=11,positionx=22) Point1=collections.namedtuple('Point1','posx,posy') p1=Point1(11,22) Point2=collections.namedtuple('Point2','posx posy') p2=Point2(11,12) p2.posx p.positionx
感觉像定义了类。
deque 双向队列,这个刷leetcode时,经常会用到
import collections d1=collections.deque() # 从右边添加元素 d1.append(1) # 从左边添加元素 d1.appendleft(2) print(d1) # 输出为:deque([2,1]) # 在指定位置插入元素 d1.insert(1,3) print(d1) # 输出为:deque([2,3,1]) # 从右边扩展列表 d1.extend([4,5,6]) # 从左边扩展列表 d1.extendleft([7,8,9]) print(d1) # 输出为:deque([9,8,7,2,3,1,4,5,6]) # 查找元素的索引 print(d1.index(3)) # 输出为4 print(d1.index(3,0,5)) # 查找指定区间 # 获取并删除最右边的元素,有点类似于栈,先进后出 x=d1.pop() print(x) # 输出为6 print(d1) # 输出为deque([9,8,7,2,3,1,4,5]) # 获取并删除最左边的元素,类似于传统队列,先进先出 y=d1.popleft() print(y) # 输出为9 print(d1) # 输出为deque([8,7,2,3,1,4,5]) # 删除指定元素 d1.remove(3) print(d1) # 输出为deque([8,7,2,1,4,5]) # 队列翻转 d1.reverse() print(d1) # 输出为deque([5,4,1,2,7,8]) # 把右边元素放到左边 d1.rotate(2) print(d1) # 输出为deque([7,8,5,4,1,2]) # 浅拷贝 d2=d1.copy() # 清空队列 d1.clear()
Refs:
[1]使用list和tuple - 廖雪峰的官方网站 (liaoxuefeng.com)
[2]Python-collections模块之defaultdict - MrSu - 博客园 (cnblogs.com)
[3]Python中collections模块 - Python运维开发 - 博客园 (cnblogs.com)
[4]python3 deque(双向队列) - Water~ - 博客园 (cnblogs.com)