数据类型以及运算符

一、数据类型

1、数字


 python3 中的数字分为 int, float, bool, complex(复数) 几大类型,在 python2 中还有一种数字类型为 long

通过 type() 函数可以查询变量对应的对象的数据类型

>>> a,b,c,d = 2,2.0,True,4+3j  
>>> type(a),type(b),type(c),type(d)
(<class 'int'>, <class 'float'>, <class 'bool'>, <class 'complex'>)

2、字符串


python 中的字符串用单引号(')或双引号(")括起来

>>> name1 = 'wenchong'
>>> type(name1)
<class 'str'>
>>> name2 = "wenchong"
>>> type(name2)
<class 'str'>
>>> number = "88"
>>> type(number)
<class 'str'>

即使是一个数字,使用双引号或单引号括起来,它也会变为 str 类型,而并非 int 类型

  

格式化

>>> print("My name is %s, I'm Crazy." % name)
My name is wenchong, I'm Crazy.
这里的 %s 为占位符,%s:表示字符串,作为数字和浮点数的占位符,还有 %d:表示数字,%f:表示浮点数

拼接

# 加号(+) 表示前后两个字符串拼接在一起
>>> "wen" + "chong" 
'wenchong'

# 星号(*) 后跟数字 n,表示星号前面的字符串重复出现 n 次
>>> "wen"*5
'wenwenwenwenwen' 

移除空白

# 定义一个字符串左右和中间均有空格
>>> name = " wen chong "
# 移除左边的空格
>>> name.lstrip()
'wen chong '
# 移除右边的空格
>>> name.rstrip()
' wen chong'
# 移除左右两边的空格
>>> name.strip() 
'wen chong'
# 移除所有的空格
>>> "".join(name.split())
'wenchong'

分割

str.split() 方法分割字符串,默认以空白分割

>>> name = "WenChong,Jack,Tom"
>>> name.split(",")
['WenChong', 'Jack', 'Tom']
>>> 

长度

使用 len() 函数统计字符串的长度

>>> name = "wenchong"
>>> len(name)
8

索引

# 输出 name 变量中的第四个字母
>>> name[3]
'c'
# 输出 name 变量的最后一个字母
>>> name[-1]
'g'

切片

# 输出 name 变量的第 1 个到第 3 个字母
>>> name[0:3]
'wen'
# 输出 name 变量的第 3 个 到第 5 个字母
>>> name[2:5]
'nch'

字符串的索引以及切片都要使用到下标

语法为:变量[开始下标:结束下标]

下标是从 0 开始,-1 是从末尾的开始位置

3、列表


列表是 python 中使用最频繁的数据类型,可以完成大多数集合类的数据结构实现,

列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号([])之间、用逗号分隔开的元素列表。

列表的创建:

列表的元素可以包含字符串、数字和列表

>>> my_list = ['shanghai','beijing',88,33,['wen','chong',9],'55']
>>> print( type(my_list) )
<class 'list'>

索引

列表的索引【即下标】和字符串的是一样的,都是从 0 开始,-1 为末尾第一个

# 输出列表的第一个元素
>>> print( my_list[0] )
shanghai
# 输出列表的最后一个元素
>>> print( my_list[-1] ) 
55
# 输出列表的第 5 个元素
>>> print( my_list[4] )  
['wen', 'chong', 9]

通过 list.index() 方法查看元素的下标

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong'] 
>>> print( my_list.index('shengzhen') )
2

切片

切片的格式为: 变量名[头下标:尾下标:步长]

  头下标:如果不输入,默认为 0

  尾下标:默认为取到最后一个;

      尾下标大于最大的索引值,则取值到最后一个;

      头下标必须在尾下标的左边,否则取值为空列表

  步长:每隔几个取一个元素,默认为 1

# 输出第 1 个到第 3 个元素
>>> print( my_list[0:3] )       
['shanghai', 'beijing', 88]
>>> print( my_list[:3] ) 
['shanghai', 'beijing', 88]

# 输出第 3 个到最后一个元素
>>> print( my_list[3:6] )        # 该列表的最大索引为 5
[33, ['wen', 'chong', 9], '55']
>>> print( my_list[3:] ) 
[33, ['wen', 'chong', 9], '55']

# 输出第 3 个到倒数第二个元素,
>>> print( my_list[3:-1] )
[33, ['wen', 'chong', 9]]

# 当头下标在尾下标的右边时,取值为空
>>> print( my_list[3:0] )  
[]
>>> print( my_list[3:-5] ) 
[]

# 每隔一个元素输出,步长为 2
>>> print( my_list[::2] )
['shanghai', 88, ['wen', 'chong', 9]]

添加【list.append()/list.insert()】

list.append() 在列表的最后追加元素,list.insert() 在列表的某个元素之前插入元素

>>> my_list.append( 'wenchong' )
>>> print( my_list )
['shanghai', 'beijing', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

# 第一个参数为下标,即在第 3 个元素前增加 "shengzhen"
>>> my_list.insert(2,'shengzhen')
>>> print( my_list )             
['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

删除【list.pop()/list.remove()/del】

删除列表中的某个元素 list.pop()  方法,参数为下标,默认为 -1

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
# pop() 方法默认将列表的最后一个元素取出,并返回[可以赋值给其他的变量]
>>> name = my_list.pop()
>>> print( name )
wenchong
# my_list 列表的最后一个元素 "wenchong" 已经不存在
>>> print( my_list )
['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55']

# 将列表的第一个元素取出,并赋值给 city 变量
>>> city = my_list.pop(0)           
>>> print( city )
shanghai
# my_list 列表的第一个元素已经不存在
>>> print( my_list )     
['beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55']

del 也可以删除列表中的元素,并且也可以删除整个变量

# del 删除元素
>>> del my_list[0]
>>> print( my_list )
['shengzhen', 88, 33, ['wen', 'chong', 9], '55']

# del 删除变量,del 可以删除任何变量
>>> del my_list
>>> print( my_list )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'my_list' is not defined

list.remove() 方法删除列表中的元素,参数为列表中的元素,list.pop() 方法的参数为下标

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
>>> my_list.remove('shanghai')
>>> print( my_list )
['beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

修改

my_list[下标] = value 

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
# 修改第一个元素
>>> my_list[0] = 'ShangHai'
>>> print( my_list )
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

# 一次性修改第二个和第三个元素
>>> my_list[1:3] = ['Beijing','ShengZhen']
>>> print( my_list )
['ShangHai', 'Beijing', 'ShengZhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

长度

len() 函数可以查看任何数据类型的长度

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
# 输出 my_list 列表的长度,即元素的个数
>>> print( len(my_list) )
8

# 输出 my_list 列表的第五个元素的长度,由于第五个元素为 list,则显示这个列表的长度
>>> print( len(my_list[5]))
3

# 输出 my_list 李彪的第一个元素的长度,由于为 string,则显示 string 的长度
>>> print( len(my_list[0]))
8

 切片

列表的切片与字符串的切量基本相同

# 输出完整的列表
>>> print( my_list )
['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

# 输出第 2-3 个元素的列表
>>> print( my_list[1:3] )
['beijing', 'shenzhen']

# 从第一个元素开始,每隔一个元素输出
>>> print( my_list[::2] )
['shanghai', 'shengzhen', 33, '55']

# 输出第 6 个到最后一个元素
>>> print( my_list[5:])
[['wen', 'chong', 9], '55', 'wenchong']

循环

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
>>> for element in my_list:
...     print( element )
... 
shanghai
beijing
shengzhen
88
33
['wen', 'chong', 9]
55
wenchong

enumerate() 函数为可迭代的对象增加上序号,第一个参数为可迭代对象,第二个参数为开始的序号,默认为 0 

>>> for k,element in enumerate(my_list):
...     print(k,element)
... 
0 shanghai
1 beijing
2 shengzhen
3 88
4 33
5 ['wen', 'chong', 9]
6 55
7 wenchong

 包含

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
>>> 'shanghai' in my_list
True
>>> 'ShangHai' in my_list        
False

组合

符号 +

list.extend

>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> print(list1+list2)
[1, 2, 3, 4, 5, 6] 
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list1.extend(list2)
>>> print( list1 )
[1, 2, 3, 4, 5, 6]

 重复

通过 * 号让列表的所有元素重复 N 次

>>> ['a']* 4
['a', 'a', 'a', 'a']

 统计

>>> my_list = [ 1,2,3,3,3,4,5,6]
>>> print( my_list.count(3) )
3
>>> print( my_list.count(1) ) 
1

反转

>>> my_list = [1,2,3]
>>> my_list.reverse()
>>> print( my_list )
[3, 2, 1]

清空

>>> my_list = [1,2,3]
>>> my_list.clear()
>>> print( my_list )
[]

排序

>>> my_list = [5,2,4,1,7]
>>> my_list.sort()
>>> print( my_list )
[1, 2, 4, 5, 7]

复制

>>> my_list = ['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
# 复制 my_list 赋值给变量 my_list_new
>>> my_list_2 = my_list.copy()
>>> print( my_list_new )
['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

修改 my_list 的第一个元素,my_list 发生变化,my_list_2 不发生变化

>>> my_list[0] = 'ShangHai'
>>> print( my_list )       
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']
>>> print( my_list_2 )   
['shanghai', 'beijing', 'shengzhen', 88, 33, ['wen', 'chong', 9], '55', 'wenchong']

修改 my_list 嵌套的第六个元素列表,my_list 和 my_list_2 都发生变化

因为 copy() 方法只会复制第一层,不会复制列表的嵌套,如果需要将嵌套的元素也进行复制,则需借助 copy 模块

>>> my_list[5][0] = 'WEN'      
>>> print( my_list )     
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['WEN', 'chong', 9], '55', 'wenchong']
>>> print( my_list_2 ) 
['shanghai', 'beijing', 'shengzhen', 88, 33, ['WEN', 'chong', 9], '55', 'wenchong']
>>> import copy
>>> my_list_3 = copy.deepcopy(my_list)
>>> print( my_list )
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['WEN', 'chong', 9], '55', 'wenchong']
>>> print( my_list_3 )  
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['WEN', 'chong', 9], '55', 'wenchong']
>>> my_list[5][1] = 'CHONG' 
>>> print( my_list )       
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['WEN', 'CHONG', 9], '55', 'wenchong']
>>> print( my_list_3 )     
['ShangHai', 'beijing', 'shengzhen', 88, 33, ['WEN', 'chong', 9], '55', 'wenchong']

  

4、元组


与列表类似,区别在于

  列表使用方括号,元组使用圆括号

  列表的元素可变,元组的元素不可变

创建元组:

>>> tup1 = (1,2,3)
>>> tup2 = ('a','b','c')
>>> tup3 = 1,2,3;
# 创建空元组
>>> tup4 = ()
# 创建一个元素的元组,最后必须要有一个逗号
>>> tup5 = ('WenChong',)

 元组的操作和列表基本相同,除不能修改元素

5、字典


字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

字典的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的

字典键必须遵守下面的条件:

不允许出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

>>> dict = {1:1,2:2,1:3}
>>> print( dict[1] )
3

必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

>>> idct = {[1]:1} 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

创建字典

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

访问字典里的值

通过 key 返回对应的 value

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
# 通过 key 获取 value
>>> print( my_dict['name'] )
WenChong
# 当字典中不存在 key 会报错
>>> print( my_dict['job'] )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'job'

通过 dict.get() 方法获取字典里的值

>>> print( my_dict.get('age') )     
999
# 当 key 不存在时,返回 None
>>> print( my_dict.get('job') )   
None

通过 dict.setdefault() 方法获取字典里的值,和 dict.get() 方法类型,如果 key 不存在,则添加,value 为第二个参数,默认为 None

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
>>> my_dict.setdefault('name')
'WenChong'
>>> my_dict.setdefault('address','ShangHai')        
'ShangHai'
>>> print(my_dict)
{'gender': 'male', 'name': 'WenChong', 'age': 999, 'address': 'ShangHai'}

通过 dict.keys() 和 dict.values() 方法返回所有 key 或 value

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
# 以列表返回字典所有的 key
>>> print( my_dict.keys() )
dict_keys(['gender', 'age', 'name'])
# 以列表返回字典所有的 value
>>> print( my_dict.values() )
dict_values(['male', 999, 'WenChong'])

通过 dict.items() 方法以列表返回可遍历的(键, 值) 元组数组

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
>>> print( my_dict.items() )
dict_items([('gender', 'male'), ('age', 999), ('name', 'WenChong')])

修改字典

向字典中添加新的内容为新增键值对

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
# 新增
>>> my_dict['job'] = 'IT'
# 修改
>>> my_dict['age'] = 888
>>> print(my_dict)      
{'gender': 'male', 'job': 'IT', 'age': 888, 'name': 'WenChong'}

还可以使用 .update() 方法,参数为一个字典

当 key 存在时,修改 my_dict 字典的值,当 key 不存在时,新增键值对

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
>>> my_dict.update({'age':888,'Job':'IT'})
>>> print( my_dict )                      
{'gender': 'male', 'age': 888, 'Job': 'IT', 'name': 'WenChong'}

删除字典

del  删除整个字典,或者删除字典中的某个键值对

dict.pop()  删除字典中的键值对,参数为 key

dict.clear()  清空整个字典

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
# 删除字典的一个键值对
>>> del my_dict['age']
>>> print( my_dict )
{'gender': 'male', 'name': 'WenChong'}

>>> my_dict.pop('gender')
>>> print( my_dict )
{'name': 'WenChong'}

# 删除整个字典,由于字典已经不存在,输出会报错
>>> del my_dict
>>> print( my_dict )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'my_dict' is not defined
>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
# 删除字典中的所有键值对
>>> my_dict.clear()
>>> print( my_dict )

获取字典的长度

输出的值为键值对的个数

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
>>> print( len(my_dict) )
3

查看字典中是否有 key

python 2.x 中有 dict.has_key() 在 3 中已废弃

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
>>> 'name' in my_dict
True

循环输出字典

>>> my_dict = {'name':'WenChong','age':999,'gender':'male'}
>>> for key in my_dict:
...     print(key,my_dict[key])
... 
gender male
name WenChong
age 999

使用 dict.items() 方法循环,但是效率较低,需要提前将字典转换为列表,不建议使用

>>> for k,v in my_dict.items():
...     print(k,v)
... 
gender male
name WenChong
age 999

6、集合


特点:元素无次序,不可重复。

种类:可变集合、不可变集合

创建集合

set()  # 创建一个空集合

set(iterable)  # 创建一个集合,iterable 是一个可迭代对象

frozenset()  # 创建一个不可变的空集合

frozenset(iterable)  # 创建一个不可变的集合

# 创建一个空集合
>>> s1 = set()
>>> print(s1)
set()

# 创建一个集合
# 在输出 s2 时,重复的元素 1,2,3 都只出现了一次
>>> s2 = set([1,2,3,4,3,2,1])
>>> print(s2)
{1, 2, 3, 4}

# 集合的顺序与可迭代对象的顺序无关
>>> s3 = set("wenchong")
>>> print(s3)
{'n', 'e', 'h', 'c', 'w', 'g', 'o'}

# 无序的集合,无法使用索引获取集合内的元素
>>> s3[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

创建集合时,集合的元素都必须为不可变的,如果 set 的元素中包含 list,dict 等可变数据

>>> s1 = set([1,2,3,[1,2]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

将元素从 list 变更为 tuple 

>>> s1 = set([1,2,3,(1,2)])
>>> print(s1)
{(1, 2), 1, 2, 3}

set的方法

通过 dir(set) 可以查看 set 的所有方法

>>> dir(set)
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

每一个方法都可以通过 help() 函数查看说明

>>> help(set.add)
Help on method_descriptor:

add(...)
    Add an element to a set.
    
    This has no effect if the element is already present.

下面看下几个常用的方法

add

添加元素到 set 中

# 为 set 集合添加新的元素
>>> s1 = set()
>>> s1.add('wenchong')
>>> print(s1)
{'wenchong'}

 update

添加另一个 set 中的元素到自己

>>> s1 = set([1,2,3])
>>> s2 = set([1,2,4,5,6])
# 将 s2 中的元素添加到 s1 中,由于 s2 中的元素 1,2 在 s1 中本身存在,所以只添加了 4,5,6 元素到 s1 中
>>> s1.update(s2)
>>> print(s1)
{1, 2, 3, 4, 5, 6}
>>> print(s2)
{1, 2, 4, 5, 6}

pop

随机移除 set 中的一个元素,并返回,如果 set 为空则报错,pop 方法不能移除指定元素

# 定义一个简单的 set
>>> s1 = set([1,2,3])
>>> s1.pop()
1

# set.pop() 方法在移除元素时有参数,只能随机移除,报错中 takes no arguments 不需要参数
>>> s1.pop(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
>>> s1.pop() 
2

# 将通过 pop 移除的数据返回给变量 element 
>>> element = s1.pop()
>>> print(element)
3

# 当 set 为空时,使用 pop 方法报错
>>> s1.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'

remove

移除 set 中一个指定的元素,但是如果这个元素不存在,则报错,移除的元素无法赋值给变量

>>> s1 = set([1,2,3]) 
# 移除 s1 中的元素 1
>>> s1.remove(1)
# 之前已经将 1 移除了,再次移除时报错
>>> s1.remove(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 1

discard

移除 set 中一个指定的元素,移除的元素无法赋值给变量,和 remove 的区别是如果元素不存在,不报错

>>> s1 = set([1,2,3])
>>> s1.discard(1)
>>> s1.discard(1)
>>> print(s1)
{2, 3}

clear

移除 set 中的所有元素

copy

返回一个浅拷贝的新 set

difference 【差集】

A.difference(B): 返回一个新的 set ,新 set 的元素为 A 中存在,B 中不存在

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
# 返回新的 set,s1 中有元素1,而 s2 中没有元素 1,故返回 1
>>> s1.difference(s2)
{1}
# 返回新的 set,s2 中有元素4,而 s1 中没有元素 4,故返回 1
>>> s2.difference(s1)
{4}

symmetric_difference 【对差集】

A.symmetric_difference(B): 返回一个新的 set ,新 set 的元素为 A 中存在,B 中不存在,以及 B 中存在,A 中不存在

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
# 元素 1 只存在于 s1 中,元素 4 只存在于 s2 中,故返回一个新的 set: {1,4}
# s1 和 s2 谁作为参数无所谓
>>> s1.symmetric_difference(s2)
{1, 4}
>>> s1.symmetric_difference(s2)
{1, 4}

difference_update 【差集】

A.difference_update(B): 与 difference 返回的 set 相同,但是会将 返回的 set 赋值给 A 

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
# 返回 s1 中存在,而 s2 中不存在元素集合,再将该集合赋值给 s1
>>> s1.difference_update(s2)
>>> print(s1)
{1}
>>> s1 - s2
{1}
>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
# 返回 s2 中存在,而 s1 中不存在元素集合,再将该集合赋值给 s2
>>> s2.difference_update(s1)
>>> print(s2)
{4}
>>> s2 - s1
{4}

symmetric_difference_update【対差集】

A.symmetric_difference_update(B): 与 symmetric_difference 返回的 set 相同,但是会将返回的 set 赋值给 A 

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])

>>> s1.symmetric_difference_update(s2)
>>> print(s1)
{1, 4}

# 重新定义 s1 
>>> s1 = set([1,2,3])
>>> s2.symmetric_difference_update(s1)
>>> print(s2)
{1, 4}

intersection【交集】

A.intersection(B,C,D...): 返回所有集合的交集,即在所有 set 中都存在的元素集合

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4]) 
>>> s3 = set([3,4,5])         
>>> s1.intersection(s2)
{2, 3}
>>> s2.intersection(s1)
{2, 3}
>>> s1.intersection(s2,s3)
{3}
>>> s1 & s2
{2, 3}
>>> s1 & s2 & s3
{3}

intersection_update【交集】

A.intersection_update(B): 与 intersection 返回的 set 相同,但是会将返回的 set 赋值给 A

union【并集】

A.union(B,C,D...): 返回两个或多个 set 的并集,即所有的 set 中的元素

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
>>> s3 = set([3,4,5])
>>> s1.union(s2,s3)
{1, 2, 3, 4, 5}
>>> s1 | s2 | s3
{1, 2, 3, 4, 5}

isdisjoint

A.isdisjoint(B): 如果 A 与 B 没有交集,则返回 True,有交集则返回 False

>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
# 返回 s1 与 s2 的交集
>>> s1.intersection(s2)
{2, 3}
# s1 与 s2 有交集,返回 False
>>> s1.isdisjoint(s2)
False

issubset【子集】

A.issubset(B): 集合 A 中的所有元素,是否 B 中都存在,如果存在则返回 True,不存在则返回 False

issuperset【超集/父集】

A.issuperset(B): 集合 A 中包含集合 B 中的所有元素则返回 True,否则返回 False,与 issubset 相反

>>> s1 = set([2,3])  
>>> s2 = set([1,2,3,4])
# 判断 s1 是否为 s2 的子集
>>> s1.issubset(s2)
True
>>> s1 < s2
True
# 判断 s2 是否为 s1 的超集
>>> s2.issuperset(s1)
True
>>> s2 > s1
True 

二、运算符

算术运算符

假设 a=10,b=20

比较运算符

假设 a=10,b=20

赋值运算符

假设 a=10,b=20

逻辑运算符

假设 a=10,b=20

成员运算符

身份运算符

位运算符

运算符的优先级

更多请参考

原文地址:https://www.cnblogs.com/wenchong/p/5780147.html