先区分一下序列类型和散列类型:

序列类型:list、string、tuple,他们中的元素是有序的。

散列类型:set、dict,他们中的元素无序的。(注意:python3.7.0开始字典变成"有序"了)

序列类型有序,可以用索引。而散列类型中的元素是无序的,所以不能索引。

一、集合

(一).集合的特性:无序、唯一、可变。集合中的元素需要可哈希的,元素不可以是可变对象。

定义一个集合:

(1).工厂方法:se = set()

注意不要写成 se = () 这样变成元组了。

(2).直接定义:se = {1,2,3} 用大括号括起来。

大括号中要写入元素,不写元素就是一个空字典了。

(3).案例分析:

#分析这两种定义,哪一个会报错?

s1 = {1, ['a', 'b', 'c']}

s2= {1, ('a', 'b', 'c')}

第一种会报错。TypeError: unhashable type: 'list'

因为集合中的元素要符合不可变这个规则, 列表可变,不符合规则,报错了。

第二种,元组不可变,符合规则,所以解释器不会跟你叫劲。

至于什么是可哈希?往下翻……

(二).集合的运算

(1).检查成员:in / not in

语法:item in set_object -> bool

例:

not in 就是取反

(2).交集:&

两个集合共同有的元素,取两个集合重复的元素。

例:

#1.有两个列表 x = [1,2,3,'a','b','c'] y = ['a','b','c'] 找出x,y列表中,共有元素

x= [1, 2, 3, 'a', 'b', 'c']

y= ['a', 'b', 'c']print(set(x) &set(y))"""列表没有交集"&"的功能,但是集合有。

那么先工厂一下,然后再交集。

运行结果:

{'c', 'b', 'a'} # 集合无序,所以元素输出的顺序未必如自己预想的"""

View Code

为什么运行结果的顺序是乱的?因为集合无序的!

(3).并集:|(shift+回车上面那个)

取出不重复的值。字面意思理解,并集,并在一起了(相当于变成一个集合了,集合的特性之一:元素唯一)。

例:

(4).差集:-

剪掉两个集合中的重复部分。

本人数学最烂,就这么死记硬背着,第二个集合后面的元素都会砍掉。

(5).与非集:^(脱字符:shift+6)

取两个集合各自独有的元素。

(6).小技巧:如何去重元素?

利用集合的特性之一:唯一性

a = [1, 2, 2, 3, "a", "b", "c", "a", "b", "a", 3]

# 工厂一下,set()print(set(a)) # {1, 2, 3, 'c', 'b', 'a'}

(三).集合的常用方法

(1).set.add() 添加单个元素

(2).set.update(iterable) 批量更新,会去重。

二、字典

(一).字典的特性

1.key唯一

2.无序(散列类型,Python3.7.0之前)

3.可变

key是唯一的,需要的是不可变对象,且要符合变量命名规则。key重名的话,值会被后者所覆盖。

注意版本之间的区别,在Python3.7.0之前:字典是无序的(散列类型);从Python3.7.0开始:字典不再是散列类型了,是按照键的插入顺序进行排列!

4.可以嵌套到任意深度(仅受可用内存约束)

(二).定义一个字典

(1).直接大括号:di = {} 是一个空字典

type(di)之后:

注意要与集合的定义区别开来!定义空集合是:s1 = set()

一般是直接把值写进去,语法:di = {key1:value,key2:value,...} 键值对是冒号的形式

例:

(2).工厂方式:di = dict(key1=value,key2=value,...) 键值对用等号"="等起来,工厂方式的key不要加引号!

例:

(3).案例分析:

#分析这两种定义,哪一个会报错?

di1 = {'a': 'test', ('a', 'b'): 'test'}

di2= {'a': 'test', {'a', 'b'}: 'test'}

di2会报错,TypeError: unhashable type: 'set'

key需要是不可变对象。第二种里有一个集合,集合的特性之一是可变,不符合key的规则,解释器跟你急了。

而第一种里是一个元组,元组不可变,没问题了。

另外,内建函数也可以作为字典的key:

d1 = {len: 1, str: "aaa"}print(d1[len]) #1

print(d1[str]) #'aaa'

View Code

(三).往字典里插入值

di ={}#直接赋值一样

di["name"] = "quanquan616"

"""get(key) 如果key不存在,不会报错。取到了会返回原有值。

get(key,value) 当key不存在的时候,会返回value的值,常用来提示。"""di.get("sex", "没有这个键")"""如果要插入值,可以这么做:

di["name"] = di.get("name","")+"zyb"

di["sex"] = di.get("sex","male")

di["age"] = di.get("age",0)+30

di -> {'name': 'zyb', 'sex': 'male', 'age': 30}"""

"""setdefault(key,value) 字面理解,设置默认。

key有的话会返回原有值,无此key才会设置。

如果此key已有,不会改变原有值,不会被更新"""di.setdefault("name", "zyb")"""update(dict_object) 参数需要是一个字典对象。

有就改变,没有就添加进去。"""di.update({"age": 35, "read": 15})#fromkeys(iterable,value) 批量设置,所有的值都是一样的。不会改变原有字典

di.fromkeys("abc", 30)print(di)#{'name': 'quanquan616', 'age': 35, 'read': 15}

View Code

(四).对字典进行取值

#直接用键进行取值,Dict[key]

print(di["name"]) #quanquan616

#get(key) 取到了就返回值,没有取到不会报错

print(di.get("name")) #quanquan616

#get()的另一种用法

di ={}

di["name"] = di.get("name", "") + "zyb"

print(di) #{'name': 'zyb'}

#setdefault(key) 有就返回这个键的值。如果没有这个键,会创建,不指定值的话,会是None。不会因为指定了值而改变原有数据。

print(di.setdefault("name")) #quanquan616

#values() 取出所有的值,返回一个迭代器

print(di.values()) #dict_values(['quanquan616', 35, 15])

View Code

(五).changed in python3.7.0

官方文档对python3.7.0中字典的描述:

Dictionary order is guaranteed to be insertion order.Dictionaries preserve insertion order.

Note that updating a key does not affect the order.Keys added after deletion are inserted at the end.

大意:字典保留的顺序是键插入的顺序,更新值不会影响原有的顺序,但删除后添加的键将在末尾插入。

演示如下:

(六).字典小技巧(以下代码均在python3.7.0中运行)

(1).对字典中的元素进行排序

di = {"in": 123, "to": 511, "she": 255, "i": 111}print(sorted(di.items(), key=lambda item: item[1], reverse=True))#运行结果:[('to', 511), ('she', 255), ('in', 123), ('i', 111)]

"""di.items() 将字典转化为可迭代对象。Dict.items()将字典中的key-value元素,转化为了元组

# [('in', 123), ('to', 511), ('she', 255), ('i', 111)]

key=lambda item: item[1] 取元素中的第二个元素作为比较的参数"""

key是用来指定做排序的每项元素的那个部分。匿名函数的item,就是指代每项元素,item[1]就是元素的第二项的意思。

注意此方法中,value的值只能是数值,如果出现字符串就会报错。(字符串和数值能直接做比较吗?)

(2).对列表中的多个字典排序

#按age从大到小排序

alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}]

alist.sort(key=lambda item: -item.get("age"))"""key中的lambda表达,等价于下面这种方式。

获得字典中"age"的值,key的意思是以哪个函数为关键字。"""

#def get_sort(li):#return li.get("age")#alist.sort(key=get_sort, reverse=True)

print(alist)#[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]

View Code

(3).合并字典(键相同则覆盖)

x = {"a": 1, "b": 2}

y= {"b": 3, "c": 3, "d": 4}

z= {**x, **y}print(z)#{'a': 1, 'b': 3, 'c': 3, 'd': 4}

View Code

(4).字典代替多个if...elif

如下这段if...elif...else语句:

deffun(x):if x == "a":return 1

elif x == "b":return 2

else:return None

View Code

可以写成更加简洁更加pythonic的代码:

deffun(x):return {"a": 1, "b": 2}.get(x)

dict.get() 如果get不到值会返回None

(5).dict.pop()方法从字典中删除条目。但是,传递给pop()中的参数,必须是字典中存在的键,而不是值。

三、运算符(部分简单的运算符之前已有摘录,不在这里重复了,遇到实际情况不会了直接google it)

(一).身份运算符:is / is not

两个对象,是否指向同一个id。(id和内存地址还是有区别的)

注意区分"=="和"is":

==用来判断两个值是否相等,is是判断两个对象的id是否相同。

(二).逻辑运算符 not > and > or

四、哈希

hash(object)生成一个唯一的哈希值。

小技巧:这个内置函数,可以来判断一个对象是否是可变的。能生成哈希值的就是不可变对象。

python集合运算符_Python 集合、字典、运算符相关推荐

  1. python创建集合set()_Python 集合set

    可变集合set 集合set是Python中一种基本数据类型,它分为可变集合(set)和不可变集合(frozenset)两种.类似于其他语言,集合是一个无序不重复元素集,包括创建集合set.向集合中添加 ...

  2. python中集合运算_python集合运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 每个韦恩(venn)图中的红色部分是给定集合运算得到的结果.? python 集 ...

  3. python中的运算符_Python中的运算符

    说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 赋值运算,用于接收运算符或方法 ...

  4. python集合类型_python集合类型介绍

    我们在学习数学的时候学过集合这个概念,在Python中同样存在一种名叫集合的数据类型,它也是用来保存不重复的元素,简单的说,集合就是包含了一些唯一存在的元素. 元素有以下几个特性: 1) 无序性,集合 ...

  5. python集合运算_Python 集合set()添加删除、交集、并集、集合操作详解

    在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法 ...

  6. python的集合类型_python集合类型

    集合类型简介 集合也是容器,其内元素都是无序.唯一.不可变的.它常用来做成员测试.移除重复数据.数据计算(比如交集.并集.差集). 集合Set是dict的无value版.集合也使用大括号包围: > ...

  7. python关系运算符中表示不等于的关系运算符_Python学习之------运算符表达式(关系运算符,逻辑运算符,三元表达式,成员关系)...

    @详细看Python学习手册第121页. 1,算术运算符(加减乘除) 2,关系运算符(又叫比较运算符 > < == != >= <=) xy,x>=y    大小比较,返 ...

  8. python集合用法_Python 集合(Set)

    集合 集合是无序.无索引的数据集.在Python中,集合用花括号包裹. 示例 创建集合: thisset = {"自行车", "汽车", "高铁&qu ...

  9. python 复数幂_python基础学习——运算符(1)

    python非常显著的一个特点是计算能力超级强,支持各种计算,本文主要介绍几大常用的运算符在python中的应用方法:包括7大运算符:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.身份运 ...

最新文章

  1. ACMNO.36输入三个整数,按由小到大的顺序输出。
  2. 打造线下版元宇宙!机器人VR助力远程做核酸,登上Science子刊
  3. flannel源码分析--RegisterNetwork
  4. sublime的TAB和空格统一
  5. mysql 数组判断_mysql 判断两个数组是否有交集
  6. python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...
  7. vsftpd安装问题汇总(持续更新。。)
  8. 帝国CMS7.2 7.5微信登录插件
  9. WSL1 升级为 WSL2
  10. 如何用计算机做出折线图,曲线图怎么做-怎样在电脑上做曲线图电脑上如何做曲线图 – 手机爱问...
  11. API的String 一些用法
  12. 有源带阻和无源带阻的区别_一文看懂AOC有源光缆与DAC高速线缆的差异
  13. 计算机硬件知识大赛,计算机知识技能大赛.doc
  14. Python海龟turtle画图常见画图代码大全
  15. 第三步_安装jdk环境
  16. 2019开放大学计算机应用基础,国家开放大学2019年电大计算机应用基础考试试题一试卷(国家开放大学).doc...
  17. 高频量化交之李庆:在华尔街狼共舞的岁
  18. js 日语索引 日文排序
  19. 对一个浮点数保留两位小数
  20. 20年进入下半赛程,你变强了吗?

热门文章

  1. linux gcc编译下的文件读写操作
  2. Ubuntu 下PySpark安装
  3. 时分秒 java_JAVA 时分秒累加
  4. mysql保存一个文件怎么打开_悄悄告诉你,MySQL 通过SQL语句导出到Excel的方法-sql文件怎么打开...
  5. Mysql无法创建外键的原因汇总_查看MySQL创建外键约束失败详细原因的方法
  6. java 压缩加密 github_关于Java:使用github中的AES-256-CBC加密
  7. python 数据库连接池_【转】Python 数据库连接池
  8. springMVC问题XXX is not mapped [from XX]或者Unknown entity: com.spring.main.pojo.Person
  9. mongodb与java连接_MongoDBJava连接
  10. Mybatis源码分析之(三)mapper接口底层原理(为什么不用写方法体就能访问到数据库)