首页 > 其他分享 >数据类型-集合set-内置方法

数据类型-集合set-内置方法

时间:2023-02-21 14:25:06浏览次数:45  
标签:内置 name age friends2 数据类型 sex set 集合

作用
集合、list、tuple、dict一样都可以存放多个值,但是集合主要用于:去重、关系运算
定义

在{}内用逗号分隔开多个元素,集合具备以下三个特点:
     1:每个元素必须是不可变类型
     2:集合内没有重复的元素
     3:集合内元素无序

s = {1,2,3,4}  # 本质 s = set({1,2,3,4})

注意1:列表类型是索引对应值,字典是key对应值,均可以取得单个指定的值,而集合类型既没有索引也没有key与值对应,所以无法取得单个的值,而且对于集合来说,主要用于去重与关系元素,根本没有取出单个指定值这种需求。

注意2:{}既可以用于定义dict,也可以用于定义集合,但是字典内的元素必须是key:value的格式,现在我们想定义一个空字典和空集合,该如何准确去定义两者?
d = {} 		# 默认是空字典 
s = set()   # 这才是定义空集合

类型转换

# 但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
>>> s = set([1,2,3,4])
>>> s1 = set((1,2,3,4))
>>> s2 = set({'name':'jason',})
>>> s3 = set('egon')
>>> s,s1,s2,s3
{1, 2, 3, 4} {1, 2, 3, 4} {'name'} {'e', 'o', 'g', 'n'}

使用
关系运算

我们定义两个集合friends与friends2来分别存放两个人的好友名字,然后以这两个集合为例讲解集合的关系运算

>>> friends1 = {"zero","kevin","jason","egon"} # 用户1的好友们 
>>> friends2 = {"Jy","ricky","jason","egon"}   # 用户2的好友们

两个集合的关系如下图所示
插图:示范集合插图

1.合集/并集(|):求两个用户所有的好友(重复好友只留一个)

>>> friends1 | friends2
{'kevin', 'ricky', 'zero', 'ly', 'Jy', 'qq'}

2.交集(&):求两个用户的共同好友

>>> friends1 & friends2
{'ly', 'qq'}

3.差集(-):

>>> friends1 - friends2 # 求用户1独有的好友
{'kevin', 'zero'}
>>> friends2 - friends1 # 求用户2独有的好友
{'ricky', 'Jy'}

4.对称差集(^) # 求两个用户独有的好友们(即去掉共有的好友)

>>> friends1 ^ friends2
{'kevin', 'zero', 'ricky', 'Jy'}

5.值是否相等(==)

>>> friends1 == friends2
False

6.父集:一个集合是否包含另外一个集合

包含则返回True
>>> {1,2,3} > {1,2}
True
>>> {1,2,3} >= {1,2}
True
不存在包含关系,则返回False
>>> {1,2,3} > {1,3,4,5}
False
>>> {1,2,3} >= {1,3,4,5}
False

7.子集

>>> {1,2} < {1,2,3}
True
>>> {1,2} <= {1,2,3}
True

去重

集合去重复有局限性

  1. 只能针对不可变类型
  2. 集合本身是无序的,去重之后无法保留原来的顺序
示例如下

>>> l=['a','b',1,'a','a']
>>> s=set(l)
>>> s # 将列表转成了集合
{'b', 'a', 1}
>>> l_new=list(s) # 再将集合转回列表
>>> l_new
['b', 'a', 1] # 去除了重复,但是打乱了顺序

# 针对不可变类型,并且保证顺序则需要我们自己写代码实现,例如
l=[
    {'name':'lili','age':18,'sex':'male'},
    {'name':'jack','age':73,'sex':'male'},
    {'name':'tom','age':20,'sex':'female'},
    {'name':'lili','age':18,'sex':'male'},
    {'name':'lili','age':18,'sex':'male'},
]

new_l=[]

for dic in l:
    if dic not in new_l:
        new_l.append(dic)

print(new_l)
# 结果:既去除了重复,又保证了顺序,而且是针对不可变类型的去重
[
    {'age': 18, 'sex': 'male', 'name': 'lili'}, 
    {'age': 73, 'sex': 'male', 'name': 'jack'}, 
    {'age': 20, 'sex': 'female', 'name': 'tom'}
]

其他操作

# 1.长度
>>> s={'a','b','c'}
>>> len(s)
3

# 2.成员运算
>>> 'c' in s
True

# 3.循环
>>> for item in s:
...     print(item)
... 
c
a
b

练习

一.关系运算
  有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'ly','qq','kevin','ricky','gangdan','biubiu'}
  linuxs={'kermit','tony','gangdan'}
  1. 求出即报名python又报名linux课程的学员名字集合
  2. 求出所有报名的学生名字集合
  3. 求出只报名python课程的学员名字
  4. 求出没有同时这两门课程的学员名字集合

求出即报名python又报名linux课程的学员名字集合
pythons & linuxs
求出所有报名的学生名字集合
pythons | linuxs
求出只报名python课程的学员名字
pythons - linuxs
求出没有同时这两门课程的学员名字集合
pythons ^ linuxs

标签:内置,name,age,friends2,数据类型,sex,set,集合
From: https://www.cnblogs.com/wangxianyun/p/17140870.html

相关文章

  • 数据类型-元组tuple-内置方法
    作用元组与列表类似,也是可以存多个任意类型的元素,不同之处在于元组的元素不能修改,即元组相当于不可变的列表,用于记录多个固定不允许修改的值,单纯用于取定义方式#在()内......
  • vue3 setup echarts5 绘制图表
    vue3<divref="chartRef1"style="width:100%;height:100%"/><scriptsetuplang="ts">importtype{ECharts,EChartsOption}from"echarts";import{init......
  • PostgreSQL update set from 两表联合更新
    updatet_businesstbsetsystem_id=ir.application_idfromt_business_irregularirwheretb.affected_business=ir.application_nameupdatet_businesstbsetsyst......
  • 数据类型----字符串内置方法
    一、定义#定义:在单引号\双引号\三引号内包含一串字符name1='jason' #本质:name=str('任意形式内容')name2="lili" #本质:name=str("任意......
  • PHP unset浅谈
    一定义unset() 函数用于销毁给定的变量。起初我以为销毁了变量,那内存肯定就释放了,实际上并不是如此。二unset整个数组<?php$arr=[];echo(date('Y-m-dH:i:s......
  • [ARC107D] Number of Multisets
    \(\text{Solution}\)学习到了一些\(dp\)的\(trick\)设\(f_{i,j}\)表示用了\(i\)的元素,当前和为\(j\)的方案数\(dp\)有两样不好处理的东西第一是当前和不一定......
  • 如何在高版本Android 调用 SystemProperties.set
     在高版Android中是无法找到SystemProperties类的,所以我们需要手动导入低版本的SDK.第一步、在app的build.gradle添加:StringSDK_DIR=System.getenv("/Users/dan......
  • setInterval和setTimeout的使用区别
    这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。一、方法相同点:setTimeout和setInterval的语法相同。它们都有两个参数,一个......
  • [AtCoder] F - Knapsack for All Subsets
    ProblemStatement dp[i][j]:thenumberofsubsetsofA[0,i]whosesumisj.dp[0][0]=1,thereisonly1wayofnotpickinganythingfromanemptyarrayt......
  • writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
    appium第一次连接手机时,报错:java.lang.SecurityException:Permissiondenial:writingtosettingsrequires:android.permission.WRITE_SECURE_SETTINGS解决办法,即打开......