python中的list, dict, tuple以及collections模块的基本用法
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用于查询最后一个元素
# 返回指定元素的索引
i=list2.index('is') # 往列表末尾追加元素
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。
# 字典的键值排序
keys=sorted(dict1.keys())
# 删除键值对
dict1.pop('a')
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)
python中的list, dict, tuple以及collections模块的基本用法的更多相关文章
- Python中对序列数据的汇总(collections模块)
目录 Counter most_common 对于序列如字符串str.列表list和tuple可以统计里面数据出现的次数.我们使用的是 collections 模块. collections模块的常用 ...
- python中的字典(dict),列表(list),元组(tuple)
一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...
- python中的list、tuple和dictionary
列表 列表是python中最基本的数据结构之一,并且列表的数据项不需要具有相同的数据类型,创建一个列表,只需把逗号分隔的不同数据项使用方括号括起来即可.具体的定义式如下: list=['变量1','变 ...
- python中list和dict
字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 1 2 3 ...
- Python中的元祖Tuple
Python中的元祖和list基本上一样 tuple = () # 表示一个空的元祖 tuple = (50, ) # 元组中只有一个元素的时候,必须在后面加上逗号 无关闭分隔符 任意无符号的对象,以 ...
- python 中的 list dict 与 set 的关系
转自: http://www.cnblogs.com/soaringEveryday/p/5044007.html list arraylist 实现(数组) List 通过内置的 append()方 ...
- python中json与dict之间转换
Python之dict(或对象)与json之间的互相转化 在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import js ...
- python中map()和dict()的用法
map()用法 map()是python的内置函数,会根据提供的函数对指定序列做映射. 语法: map(func, iter, ...) 其中func为一个功能函数,iter表示可迭代参数序列.map ...
- Python中的序列化以及pickle和json模块介绍
Python中的序列化指的是在程序运行期间,变量都是在内存中保存着的,如果我们想保留一些运行中的变量值,就可以使用序列化操作把变量内容从内存保存到磁盘中,在Python中这个操作叫pickling,等 ...
随机推荐
- ansible lineinfile 关闭selinux
- jdbc连接mysql数据库注意事项
1.导入mysql驱动 http://blog.csdn.net/a153375250/article/details/50851049 2.开放机器访问权限 mysql>GRANT ALL ...
- maven 中的工程依赖和层级依赖?
一.什么是工程依赖? 思考问题?1.1一旦开始分模块开发的时候,之前的所有包都会被拆分成一个一个的项目 model mapper service ... 其实mapper需要model的支持,怎么解决 ...
- plsql 普通游标
-- ①普通游标:操作步骤 边敲边想 学无止境 /* 游标:指针:内存中的一块数据缓冲区,上下文: 将查询到的结果集缓存起来,便于进行逐行定位处理. 使用完成后要及时关闭: 操作步骤? 1.定义游标 ...
- 「JSOI2018」机器人
在本题当中为了方便,我们将坐标范围改至 \((0 \sim n - 1, 0 \sim m - 1)\),行走即可视作任意一维在模意义下 \(+1\). 同时,注意到一个位置只能经过一次,则可以令 \ ...
- Java-在数组中遍历出最值
在操作数组时,经常需要获取数组中元素的最值. 代码 public class Example31{ public static void main(String[] args){ int[] arr= ...
- Ubuntu安装 php + apache + mysql
转载请注明来源:https://www.cnblogs.com/hookjc/ 1.安装SSH(必须) sudo apt-get install ssh 2.安装MySQL(虽然现在最新版为5.1,但 ...
- php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的: sql1:查询商品库存 1 if(库存数量 > 0) 2 { 3 //生成订单 4 //库存-1 5 > 当没有并发时 ...
- push自定义动画
// // ViewController.m // ViewControllerAnimation // // Created by mac on 15/5/26. // Copyright ...
- 人工智能与智能系统3-> 机器人学3 | 移动机器人平台
机器人学的基本工具已经了解完毕,现在开始了解移动机器人,这部分包括机器人平台.导航.定位. 所谓机器人平台就是指机器人的物理结构及其驱动方式.本文将学习两种典型移动机器人平台(四旋翼和轮式车)的运动与 ...