文章目录

  • 0. 序
  • 1. range
  • 2. 元祖
  • 3. 可变对象
  • 4. 映射和字典
  • 5. 字典的常用方法
  • 6. 集合
  • 7. 脑图

0. 序

蜉恋风,奈何生之短。风恋蜉,奈何死无期。阴阳从此两相隔,极似人间爱恨情仇,故曰 谓风。

摘自·网易云音乐《谓风》·热评

1. range

# range()是一个专门用来生成自然数序列的函数
# 该函数需要三个参数:1.起始位置(可以省略,默认为0);2.终止位置(不能省略);3.步长(可以省略,默认为1)
# 和切片操作类似,也是留头不留尾r = range(5)
print(r)    # range(0, 5)
print(list(r))  # [0, 1, 2, 3, 4]r = range(2, 10, 2)
print(list(r))  # [2, 4, 6, 8]
r = range(10, 2, -1)  # [10, 9, 8, 7, 6, 5, 4, 3]
print(list(r))# 用处:主要是用作for 循环的指定范围
for i in range(10):print(i)    # 0~9for s in "string":print(s)

2. 元祖

# 元祖(tuple)和列表(list)基本一致,其实就是不可变的列表
# 如果希望数据不可变,那么使用元祖即可(实际开发使用较少)# 创建元祖
names = ()
print(names, type(names))    # () <class 'tuple'>
names = ('james', 'cris', 'curry')
print(names)    # ('james', 'cris', 'curry')
print(names[2])  # curry# 元祖是不可变序列,即不能为元祖中的元素重新赋值;也不能新增或删除元素
# names[1] = 'simida' # 报错# 创建非空元祖可以省略括号,如下:
names = '詹姆斯', '科比'
print(names, type(names))    # ('詹姆斯', '科比') <class 'tuple'>
# 如果元祖只有一个元素,如果不使用括号那么该元素后面需要添加一个,来确定是元祖数据类型
# names = '雷奥',
names = ('cris')
print(names, type(names))   # cris <class 'str'># 元祖的解包(解构):就是将元祖中的每个值都赋值给一个变量
names = 10, 11, 12, 13
a, b, c, d = names
print(a, b, c, d)  # 10 11 12 13# 在对元祖进行解包,变量的数量需要和元祖中的元素的个数一致
# 如果只需要取前几个元素的值,可以使用 * 来代替后面的所有元素成一个列表(但是不能同时写多个*)
a, b, *c = names
print(a, b, c)    # 10 11 [12, 13]a, *b, c = names
print(a, b, c)       # 10 [11, 12] 13# 利用元祖的解包来进行变量值的交换
a = 100
b = 200
a, b = b, a
print(a, b)  # 200 100

3. 可变对象

# 可变对象:对象的值可以被改变
# 对象三要素:id/type/value
# 可变对象的典型例子就是列表;不可变对象的典型例子就是元祖
# 关于变量的赋值和通过变量修改对象的值需要搞清楚这两者的区别!a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)   # True  == 比较值
print(a is b)   # False  is 和 is not 比较内存地址
print(a is not b)   # True

4. 映射和字典

# 字典属于一种新的数据结构,叫做映射(mapping),和列表的作用类似,都是存储对象的
# 列表存储对象的性能很好,并且根据索引查询的性能也很好,但是如果不知道具体的索引,那么查询的性能就很差了(需要挨个遍历才能查询到指定的元素)
# 如果使用字典,就可以很块的根据要求查询到指定的元素(类似于java 的map)# 字典基础:字典中可以保存多个对象,每个对象有一个唯一的key,而对象就是这个key 对应的value
# 所以字典也称之为键值对,同时字典中的每个键值对都称之为一个项(item)# 语法:{key:value,key:value...}
d = {1: 'cris', 2: 'james', 3: 'curry'}
print(d, type(d))    # {1: 'cris', 2: 'james', 3: 'curry'} <class 'dict'># 字典的value 可以是任何值,但是key 必须是任意的不可变对象(int,str,bool,tuple...)
# 字典的键是不能重复的,如果出现重复的,否则后面会替换掉前面的。
# 推荐字典的键为 str 类型
# 字典的取值都是根据value 来获取的
print(d[1])  # cris

5. 字典的常用方法

# 创建字典:使用{key:value,...}
# 或者使用 dict()函数# 1. 使用dict(arg1=value,...)函数的方式,传入的参数名就是key,值就是value,并且参数名默认数据类型就是str
d = dict(name='cris', age=12)
print(d, type(d))   # {'name': 'cris', 'age': 12} <class 'dict'># 2. 也可以将包含双值子序列的序列转换为字典
# 双值序列:(1,2),['cris','james'],'ab'
# 子序列:序列中的元素仍然是序列,那个这个元素就可以称之为子序列
d = dict([['name', 'james'], ('age', 23)])
print(d, type(d))    # {'name': 'james', 'age': 23} <class 'dict'># len()函数可以获取字典中键值对的个数
print(len(d))   # 2# in 和 not in:in 用于检查字典是否包含指定的键,not in 用于检查字典是否不包含指定的键
print('name' in d)  # True
print('sex' in d)   # False# 获取字典的值,根据键来获取value
print(d['age'])  # 23
n = 'name'
print(d[n])  # james# 通过[key] 获取value,如果key不存在,那么抛出 KeyError 异常
# 如果通过get()方法,如果key 不存在,不会报错,直接返回None
print(d.get('name'))    # james
print(d.get('hello'))   # None 不会报错# get(key,defaultValue)
print(d.get('sex', '男'))  # 可以传入默认值,如果key 不存在,那么返回默认值# 修改字典,如果key 存在就覆盖,不存在就添加
d['name'] = '詹姆斯'
print(d['name'])    # 詹姆斯# setdefault(key,defaultValue),如果key 存在,那么直接返回对应的value
# 如果不存在,则向字典添加这个key,并返回默认的value
print(d.setdefault('name', 'zhang3'))    # 詹姆斯
print(d.setdefault('sex', '人妖'))  # 人妖
print(d)  # {'name': '詹姆斯', 'age': 23, 'sex': '人妖'}# update([other]):使用other 字典来更新原字典,如果有重复的key,则替换,没有就添加
d.update({'name': 'simida', 'address': '洛杉矶'})
print(d)    # {'name': 'simida', 'age': 23, 'sex': '人妖', 'address': '洛杉矶'}# del删除字典中的键值对,key 不存在抛出异常
del d['address']
print(d)    # {'name': 'simida', 'age': 23, 'sex': '人妖'}# popitem():随机删除字典中的键值对,一般都是删除最后一个,返回删除的键值对(元祖数据类型),如果字典是空的,抛出异常
print(d.popitem())  # ('sex', '人妖')# pop(key):根据key 删除字典中的项,返回被删除的项中的value,key 不存在就报错
# 加上默认值,如果key 不存在就返回默认值
print(d.pop('age'))  # 23
print(d.pop('abc', '这是默认值'))  # 这是默认值# clear()清空字典
d.clear()
print(d)    # {}# copy():浅复制,复制后的新对象和原对象独立,但是只会简单的复制对象内部的值
# 如果对象内部的值也是可变数据类型,那么这个值不会被复制,而是拷贝该值的地址
a = {'name': 'james', 'age': 12}
b = a.copy()
print(id(a) == id(b))   # Falsea = {1: {'name': 'james', 'age': 22}}
b = a.copy()
b[1]['name'] = 'curry'
# {1: {'name': 'curry', 'age': 22}} {1: {'name': 'curry', 'age': 22}}
print(a, b)# 字典的遍历:keys():返回的是字典的所有key,以序列形式显示
a = {'name': 'james', 'age': 12}
print(a.keys())  # dict_keys(['name', 'age'])
for key in a.keys():print(a[key])# values():返回的是字典的所有键值对的value,以序列形式显示
print(a.values())   # dict_values(['james', 12])
for value in a.values():print(value)# items():返回字典所有的项,以序列形式显示,每个元素都是一个双值子序列
# 每个双值子序列的元素就是每个项的键和值
for k, v in a.items():# k= name value= james# k= age value= 12print('k=', k, 'value=', v)

6. 集合

# 集合(set)和列表非常类似
# 1. 但是集合只能存储不可变数据类型(因为需要根据对象的hash值来存储)
# 2. 集合中存储的元素唯一且无序(和插入顺序无关)# 集合的创建:使用{}或者set()
s = {1, 23, 3, 23}
print(s)    # {1,3,23}
# 注意:使用{}表示创建的是一个空字典
s = set()
print(s, type(s))    # set() <class 'set'># 可以通过set()将序列和字典转化为集合,可以用于去重
s = set([1, 2, 3, 2, 1, 5])
print(s)    # {1, 2, 3, 5}# 将字典转换为集合时,只会包含字典中的键
s = set({1: 'cris', 2: 'james', 3: 'curry'})
print(s)    # {1, 2, 3}# 集合没有办法通过索引去操作元素,类似java 的set,但是可以通过list()转换# 可以使用 in 和 not in 来检查元素
# 可以使用len()计算集合中元素个数
# 使用add()向集合中添加元素,没有返回值
s.add(29)# update():可以传递序列,集合,字典(只会获取字典所有的key)
s.update({3, 1, 'hello'})
print(s)    # {1, 2, 3, 'hello', 29}
s.update([1, 2, 4])
print(s)    # {1, 2, 3, 4, 'hello', 29}
s.update({1: 'cris', 11: 'james'})
print(s)    # {1, 2, 3, 4, 11, 'hello', 29}# pop:随机删除集合中的元素,有返回值
s.pop()
s.pop()
print(s)    # {3, 'hello', 29}# remove:删除集合中的指定元素,没有返回值
s.remove(29)
print(s)# clear()清空
# copy()浅复制# 集合的运算
s1 = {1, 2, 3, 4}
s2 = {2, 3, 5, 6}
# & 交集运算
print(s1 & s2)  # {2,3}
# | 并集运算
print(s1 | s2)  # {1,2,3,4,5,6}
# - 差集运算
print(s1 - s2)  # {1,4}
print(s2 - s1)  # {5,6}
# ^ 异或集:获取两个集合不相交的部分
print(s1 ^ s2)  # {1,4,5,6}
# <= 检查一个集合是否是另一个集合的子集:子集就是该集合的每个元素都在另一个集合中出现
print({1, 2} <= {1, 2})  # True
# < 检查一个集合是否是另一个集合的真子集:超集不仅含有子集所有的元素,还含有子集没有的元素
print({1, 2} < {1, 2})    # False
# >= 和 > 同上

7. 脑图

Cris 的Python日记(五):Python 数据结构之元祖,字典和集合相关推荐

  1. python 常用字符串 列表元祖字典都 自带的函数方法

    上节内容回顾和补充编程语言高级低级Python种类JavaPythoncPython *****pypy字节码 和 机器码Python程序:1. 终端:C:\python35\python.exe D ...

  2. python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...

    python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 元祖跟列表类似.只不过是有区别的. 如下: tuple(元祖英文) 跟列表类似, 元素不能 ...

  3. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  4. python中元祖 字典 列表的区别_Python中元祖,列表,字典的区别

    原博文 2016-08-16 15:25 − Python中有3种內建的数据结构:列表.元祖和字典: 1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目. 列表中的 ...

  5. python 列表 元祖 字典,Python 列表、元组、字典

    可变数据类型和不可变数据类型 python里的数据都是保存在内存里的,python里的数据又分为可变类型和不可变类型: 1不可变数据类型:字符串.数字.元组,如果修改值,内存地址会发生变化: 2可变数 ...

  6. python中的切片能否修改元祖_Python列表的增删改查和元祖

    一.定义列表 1.names = ['mike','mark','candice','laular'] #定义列表 2.num_list = list(range(1,10)) #range生成1-1 ...

  7. Python中序列、列表、元祖(数组)、集合、字典

    序列 序列的两个特点:  1.索引操作符,从序列中抓取一个特定项目  2.和切片操作符,获取序列的一个切片,即一部分序列 Python一些内置函数  1.cmp(A, B):比较可为list.tupl ...

  8. python day2 python基础 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码...

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  9. python变量和对象,切片列表元祖

    一,窗口退出三种方法: 1.ctrl+z,Enter 2.quit() 3.exit()二,查看当前python版本号:python --version三,python变量和对象:变量命名: 1.组成 ...

最新文章

  1. Win2008 R2 RemoteApp深度体验之四,RemoteApp程序测试
  2. 洛谷P1040 加分二叉树运用区间DP(动态规划)求解
  3. 《挑战30天C++入门极限》C/C++中字符串常量的不相等性及字符串的Copy
  4. BZOJ 2959 - 长跑
  5. Unity ScriptObject
  6. PHP入门及服务环境配置(Nginx+PHP)
  7. 蚂蚁金服异地多活的微服务体系
  8. KVM之五:KVM日常管理常用命令
  9. spyder设置显示编码_CNC机床参数的设置及报警解除,赶紧收藏吧!
  10. 日语中的-简体与敬体
  11. 淘宝省钱攻略–人人可以做到
  12. 新手前端微信小程序img图片无法显示问题
  13. (dfppy)2Ir(NHC)的蓝光/蓝绿光铱配合物|苯基喹啉酯的中性铱配合物-齐岳生物
  14. VS2019+openCV4.5+openCV4.5 contrib扩展模块安装
  15. serialport串口通信
  16. DZ克米模板论坛V3.5版+全解密/全插件/教程
  17. Elasticsearch分词
  18. Spring:been的生命周期
  19. android网络下载图片并且显示在图库中
  20. 转载:一篇文章看明白 Android 系统启动时都干了什么

热门文章

  1. python 学习笔记 02
  2. 哈希 ---《哈希函数》------除数的选取为什么是质数?、《哈希冲突》------解决方法、《闭散列》、《开散列》
  3. 天源财富:“中国天眼”发现201颗新脉冲星
  4. 串口助手和淘晶驰串口屏模拟器联调
  5. 在中国玩不动的无人便利店,为何在美国风生水起?
  6. SuperRecovery超级硬盘数据恢复软件
  7. webpy中使用session
  8. SFP DDM接口的测量值计算
  9. delta和gamma中性_在期权交易中,Delta、Gamma、Theta、Vega都是什么?
  10. 设计一个彩灯循环控制器