10 Python 数据类型—集合

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

  1. python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.
  2. sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

1 x = set(‘spam‘)
2 y = set([‘h‘,‘a‘,‘m‘])
3 z = {1, 4, 5, 3, 7, 8}
4 print(x, y, z)
5
6 {‘a‘, ‘m‘, ‘s‘, ‘p‘} {‘a‘, ‘h‘, ‘m‘} {1, 3, 4, 5, 7, 8}

集合

 1 x = set(‘spam‘)
 2 y = set([‘h‘,‘a‘,‘m‘])
 3 z = {1, 4, 5, 3, 7, 8}
 4 print(x, y, z)
 5 print(x & y)  # 交集
 6
 7 {‘m‘, ‘a‘}
 8 print(x | y)  # 并集
 9
10 {‘p‘, ‘s‘, ‘m‘, ‘h‘, ‘a‘}
11 print(x - y)
12 print(y - x)  # 差集
13
14 {‘p‘, ‘s‘}
15 {‘h‘}

交集,并集, 差集

  集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

    去重,把一个列表变成集合,就自动去重了。

    关系测试,测试两组数据之前的交集、差集、并集等关系

1,集合的创建

1 set1 = set({1,2,‘barry‘})
2 set2 = {1,2,‘barry‘}
3 print(set1,set2)  # {1, 2, ‘barry‘} {1, 2, ‘barry‘}

2,集合的增

 1 set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘}
 2 set1.add(‘景女神‘)
 3 print(set1)
 4
 5 #update:迭代着增加
 6 set1.update(‘A‘)
 7 print(set1)
 8 set1.update(‘老师‘)
 9 print(set1)
10 set1.update([1,2,3])
11 print(set1)

3,集合的删

 1 set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘}
 2
 3 set1.remove(‘alex‘)  # 删除一个元素
 4 print(set1)
 5
 6 set1.pop()  # 随机删除一个元素
 7 print(set1)
 8
 9 set1.clear()  # 清空集合
10 print(set1)
11
12 del set1  # 删除集合
13 print(set1)

4,集合的其他操作:

  4.1 交集。(&  或者 intersection)

1 set1 = {1,2,3,4,5}
2 set2 = {4,5,6,7,8}
3 print(set1 & set2)  # {4, 5}
4 print(set1.intersection(set2))  # {4, 5}

  4.2 并集。(| 或者 union)

1 set1 = {1,2,3,4,5}
2 set2 = {4,5,6,7,8}
3 print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}
4
5 print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}

  4.3 差集。(- 或者 difference)

1 set1 = {1,2,3,4,5}
2 set2 = {4,5,6,7,8}
3 print(set1 - set2)  # {1, 2, 3}
4 print(set1.difference(set2))  # {1, 2, 3}

  4.4反交集。 (^ 或者 symmetric_difference)

1 set1 = {1,2,3,4,5}
2 set2 = {4,5,6,7,8}
3 print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
4 print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

  4.5子集与超集

1 set1 = {1,2,3}
2 set2 = {1,2,3,4,5,6}
3
4 print(set1 < set2)
5 print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
6
7 print(set2 > set1)
8 print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

5,frozenset不可变集合,让集合变成不可变类型。

1 s = frozenset(‘barry‘)
2 print(s,type(s))  # frozenset({‘a‘, ‘y‘, ‘b‘, ‘r‘}) <class ‘frozenset‘>

二,深浅copy

  1,先看赋值运算。

 1 l1 = [1,2,3,[‘barry‘,‘alex‘]]
 2 l2 = l1
 3
 4 l1[0] = 111
 5 print(l1)  # [111, 2, 3, [‘barry‘, ‘alex‘]]
 6 print(l2)  # [111, 2, 3, [‘barry‘, ‘alex‘]]
 7
 8 l1[3][0] = ‘wusir‘
 9 print(l1)  # [111, 2, 3, [‘wusir‘, ‘alex‘]]
10 print(l2)  # [111, 2, 3, [‘wusir‘, ‘alex‘]]

    对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

  2,浅拷贝copy。

 1 l1 = [1,2,3,[‘barry‘,‘alex‘]]
 2
 3 l2 = l1.copy()
 4 print(l1,id(l1))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895816
 5 print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895048
 6
 7 l1[1] = 222
 8 print(l1,id(l1))  # [1, 222, 3, [‘barry‘, ‘alex‘]] 2593038941128
 9 print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2593038941896
10
11
12 l1[3][0] = ‘wusir‘
13 print(l1,id(l1[3]))  # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016
14 print(l2,id(l2[3]))  # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016

    对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

  3,深拷贝deepcopy。

 1 import copy
 2 l1 = [1,2,3,[‘barry‘,‘alex‘]]
 3 l2 = copy.deepcopy(l1)
 4
 5 print(l1,id(l1))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167816
 6 print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048
 7
 8 l1[1] = 222
 9 print(l1,id(l1))  # [1, 222, 3, [‘barry‘, ‘alex‘]] 2915377167816
10 print(l2,id(l2))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048
11
12 l1[3][0] = ‘wusir‘
13 print(l1,id(l1[3]))  # [1, 222, 3, [‘wusir‘, ‘alex‘]] 2915377167240
14 print(l2,id(l2[3]))  # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167304

    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

时间: 2024-10-09 17:38:55

10 Python 数据类型—集合的相关文章

python 数据类型 --- 集合

1. 注意列表和集合的区别 set 列表表现形式: list_1 = [1,3,4];  集合表现形式:set_1= set() list_1 = [1,2,3,4,23,4,2] print(list_1,type(list_1)) list_1 = set(list_1) print(list_1,type(list_1)) list_2 = set([2,4,6,8,10]) print(list_2,type(list_2)) #运行结果 [1, 2, 3, 4, 23, 4, 2] <

Python数据类型-集合(set)

1.创建集合 集合的创建不同于前两种数据结构. 集合通过set(iterable)方法创建,参数iterable为可迭代对象. 示例代码: s1 = set('好好学习天天想上') # 将字符串分解为单个字符,作为集合的元素创建集合 s2 = set(('好好', '学习', '天天', '想上')) # 将元组分解为单个元素,作为集合元素创建集合 s3 = set(['好好', '学习', '天天', '想上']) # 将列表分解为单个元素,作为集合元素创建集合 print (s1) # 显示

Python数据类型及其方法详解

Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知识回顾. 一.整型和长整型 整型:数据是不包含小数部分的数值型数据,比如我们所说的1.2.3.4.122,其type为"int" 长整型:也是一种数字型数据,但是一般数字很大,其type为"long" 在python2中区分整型和长整型,在32位的机器上,取值范围是-2

python数据类型整理

Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编号.Python中有6种内建的序列.其中列表和元组是最常见的类型.其他包括字符串.Unicode字符串.buffer对象和xrange对象.下面重点介绍下列表.元组和字符串. 1.列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. (1).创

day01-day04总结- Python 数据类型及其用法

Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点型以及布尔类型.这些基本数据类型组成了基本控制块,从而创建我们的Python应用程序. 字符串 字符串(String) 是一段文本字符,通常以某种形式向用户输出.如果我们打开Python的解释器,我们试着最常见的输出"Hello World!"应用: >>> print

python数据类型及相关操作

python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字符串,例如:str='this is string';print str; b.使用双引号(")双引号中的字符串与单引号中的字符串用法完全相同,例如:str="this is string";print str; c.使用三引号(''')利用三引号,表示多行的字符串,可以在三引号

【转】Python数据类型之“数字(numerics)”

[转]Python数据类型之“数字(numerics)” 上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型. 存储在内存中的数据通常有两个属性: 在内存中的存放位置:这个存放位置通过变量名可以找到: 在内存中的存放方式:这个由数据类型决定,如占几个字节的空间.占用空间是否需要连续等. Python中有很多内置类型(built-in types),内置类型可以理解为构建在Python Interpreter(Python解释器)里面的类型.Python中主要的内置类型

Python 数据类型之列表和元组

Python 数据类型之 列表和元组 Python 根据每个变量的初始赋值情况分析其类型,并在内部对其进行跟踪 内置数据类型Booleans [布尔型] True[真] 或 False [假]Numbers [数值型] Integers[整数] Float[浮点数] Fractions[分数] Complex Number[复数]Strings [字符串型] Unicode 字符序列Bytes [字节] 和 Bytes Arrays [字节数组]Lists [列表] 是值的有序序列Tuples

开发技术--浅谈python数据类型

开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文章中提一下.并且我自己会根据这些内容进行相应的补充与扩展. 文章定位:不是科普文,是自己对于自己学习的总结. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 正文的主要内