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

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

散列类型:set、dict,他们中的元素无序的。

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

一、集合

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

定义一个集合:

(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

例:

>>>se = {1,2,'abc'}
>>>"abc" in se
True
>>>5 in se
False

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'} # 集合无序,所以元素输出的顺序未必如自己预想的
"""

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

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

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

例:

>>>se1 = {1,2,3}
>>>se2 = {4,2,3}
>>>se1 | se2
{1,2,3,4}

(4).差集:-

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

>>>se1 = {1,2,3,4,5}
>>>se2 = {4,5,6,7,8}
>>>se1 - se2
{1,2,3}

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

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

>>>se1 = {1,2,3,4,5}
>>>se1 = {4,5,6,7,8}
>>>se1 ^ se2
{1,2,3,6,7,8}

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

a = [1,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) 批量更新,会去重。

二、字典

(一).字典的特性:key唯一、无序、可变。key是唯一的,需不可变对象,重复的话会覆盖值。key要符合变量命名规则!

定义一个字典:

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

type(di)之后:<class 'dict'>

注意要与集合区别开来!

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

例:

>>>di = {'name':'mkcry','age':23}
>>>di
{'name':'mkcry','age':23}

(2).工厂方式:di = dict(key1=value,key2=value,...) 键值对用等号"="等起来

例:

>>>di = dict('name'='???','age'=88)
SyntaxError:keyword can't be an expression
>>>di = dict(name='???',age=88)
>>>di
{'name':'???','age':88}

工厂方式容易写错,记得工厂方式的key不要加引号!

(3).案例分析:

#分析这两种定义,哪一个会报错?
di1 = {'a':'test',('a','b'):'test'}
di2 = {'a':'test',('a','b'):'test'}

第二种会报错。TypeError: unhashable type: 'set'

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

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

(二).往字典里插入值

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}

(三).对字典进行取值。字典是键值对存在,取值需要通过key来取值。

# 直接用键进行取值,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])

(四).字典小技巧

(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] 取元素中的第二个元素作为比较的参数
"""

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

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

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

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

>>>a = 'jack'
>>>b ='jack'
>>>id(a)
32342752
>>>id(b)
32342752
>>> a is b
True

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

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

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

>>>a = True;b = False
>>>b and a or b
False
>>> a or b and a
True
>>> a or b and b
True

四、哈希

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

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

Python 集合、字典、运算符的更多相关文章

  1. Python集合字典运算符

    1.集合2.字典3.运算符优先级 1.集合 创建:{} set([]) 注意:创建空的集合要用set()   特点:元素唯一,无序   运算: & 交集 | 并集 - 差集   方法:   s ...

  2. Python集合&字典

    Python集合&字典 @ 目录 字典 字典的几种定义方式 第一种 第二种 第三种 字典的一些基本操作 通过key得到value 增加字典键值对 删除字典键值对 格式化操作 清空字典 复制字典 ...

  3. Python基础__字典、集合、运算符

    之前讨论的字符串.列表.元组都是有序对象,本节则重点讨论无序对象:字典与集合.一.字典 列表是Python中的有序集合,列表中的序指的是列表中的元素与自然数集形成了一个一一对应的关系.例如L=['I' ...

  4. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  5. python集合与字典的用法

    python集合与字典的用法 集合: 1.增加  add 2.删除   •del 删除集合 •discard(常用)删除集合中的元素  #删除一个不存在的元素不会报错 •remove 删除一个不存在的 ...

  6. python集合可以进行相减

    python集合可以进行相减 student = {'tom','jim','mary','tom','jack','rose'} print(student) print('rose' in stu ...

  7. Python 基础 常用运算符

    Python 基础 常用运算符 计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算术运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算. 今天我们暂只学习 算术运算. ...

  8. 【转】Python中的运算符

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

  9. python基础—字典

    阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由“键-值”对组成的集合,字典中的“值”通过“键”来引用.这里将介绍字典的定义.访问.排序等功能. 字典的创建 字典 ...

  10. 深入Python(1): 字典排序 关于sort()、reversed()、sorted()

    http://www.cnblogs.com/BeginMan/p/3193081.html 一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠 ...

随机推荐

  1. Delphi之过程与函数

    过程以保留字procedure开始,没有返回值:函数以保留字function开始,有返回值. 参数位于括号里面,多个参数之间以分号分隔,例如: procedure SetDate(Year: Inte ...

  2. ArcGIS Viewer for Flex中引入google map作底图 (转)

    在ArcGIS Viewer for Flex开发中,经常需要用到google map作为底图,我们不能通过ArcGIS Viewer for Flex - Application Builder轻易 ...

  3. ElasticSearch 监控单个节点详解

    1.介绍 集群健康 就像是光谱的一端——对集群的所有信息进行高度概述. 而 节点统计值 API 则是在另一端.它提供一个让人眼花缭乱的统计数据的数组,包含集群的每一个节点统计值. 节点统计值 提供的统 ...

  4. ASP.NET MVC4网站部署在阿里ECS云服务器(WIndows Server 2012+IIS8环境)

    首先交代一下服务器的环境配置 系统是WIndows Server2012(配置的时候选的是全能环境),服务器是IIS8 由于装了VS2012,所以系统也自动装上了.Net Framework4.5,M ...

  5. 模拟服务器MockServer之Moco详细介绍

    转载:http://blog.csdn.net/vite_s/article/details/54583243 前面一篇介绍了如何用mockito来测试我们的一些异步任务,例如网络请求时候的异步回调. ...

  6. 微信小程序 - 替换tabbar(采用固定定位形式)

    简单示例(提供思路): wxml(作为模板形式插入到需要tabbar的地方去) <view class='tab-bar'> <view class="usermotto& ...

  7. 51nod 125乘法逆元 (扩展欧几里得)

    给出2个数M和N(M < N),且M与N互质.找出一个数K满足0 < K < N且K * M % N = 1,假设有多个满足条件的.输出最小的. Input 输入2个数M, N中间用 ...

  8. quick-cocos2d-x教程9:实例之加上背景图片

    在梳理完quick-cocos2d-x框架的各个文件夹后,我们開始我们的实例教程,在helloworld后面.加上一张图片,lua编辑器,我用的lua editor.还不错. 我们首先还是參照教程.创 ...

  9. react-native 极光推送(jpush-react-native)

    极光推送官方支持的 React Native 插件 安装 npm install jpush-react-native --savenpm install jcore-react-native --s ...

  10. ddmrp

    DDMRP 特点 在供应链加入 mts 缓冲,解耦 lead time, 缩小 bullwhip 效应,最小化库存 buffer动态调整 buffer 分3个颜色共 4个区域[zone],为 gree ...