java subset(true)_集合类型内置方法 - osc_13mpeqmt的个人空间 - OSCHINA - 中文开源技术交流社区...

[TOC]

一、集合类型内置方法(set)

集合可以理解成一个集合体,学习Python的学生可以是一个集合体;学习Linux的学生可以是一个集合体。

pythoners = ['jason', 'nick', 'tank', 'sean']

linuxers = ['nick', 'egon', 'kevin']

# 即报名pythoners又报名linux的学生

py_li_list = []

for stu in pythoners:

if stu in linuxers:

py_li_list.append(stu)

print(f"pythoners and linuxers: {py_li_list}")

pythoners and linuxers: ['nick']

上述的列表方式求两个集合体的关系运算非常复杂,因此有了我们的集合数据类型。

1.用途:用于关系运算的集合体,由于集合内的元素无序且集合元素不可重复,因此集合可以去重,但是去重后的集合会打乱原来元素的顺序。

2.定义:{}内用逗号分隔开多个元素,每个元素必须是不可变类型。

s = {1, 2, 1, 'a'} # s = set({1,2,'a'})

print(f"s: {s}")

s: {1, 2, 'a'}

s = {1, 2, 1, 'a', 'c'}

for i in s:

print(i)

1

2

c

a

s = set('hello')

print(f"s: {s}")

s: {'e', 'o', 'h', 'l'}

3.常用操作+内置方法:常用操作和内置方法分为优先掌握(今天必须得记住)、需要掌握(一周内记住)两个部分。

1.1 优先掌握(*****)

长度len

成员运算in和not in

|并集、union

&交集、intersection

-差集、difference

^对称差集、symmetric_difference

==

父集:>、>= 、issuperset

子集:

1.长度len

# set之长度len

s = {1, 2, 'a'}

print(f"len(s): {len(s)}")

len(s): 3

2.成员运算in和not in

# set之成员运算in和not in

s = {1, 2, 'a'}

print(f"1 in s: {1 in s}")

1 in s: True

cd4a906ca33af431c9ef0ec040486b51.png

3.|并集

# str之|并集

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

print(f"pythoners|linuxers: {pythoners|linuxers}")

print(f"pythoners.union(linuxers): {pythoners.union(linuxers)}")

pythoners|linuxers: {'egon', 'tank', 'kevin', 'jason', 'nick', 'sean'}

pythoners.union(linuxers): {'egon', 'tank', 'kevin', 'jason', 'nick', 'sean'}

4.&交集

# str之&交集

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

print(f"pythoners&linuxers: {pythoners&linuxers}")

print(f"pythoners.intersection(linuxers): {pythoners.intersection(linuxers)}")

pythoners&linuxers: {'nick'}

pythoners.intersection(linuxers): {'nick'}

5.-差集

# str之-差集

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

print(f"pythoners-linuxers: {pythoners-linuxers}")

print(f"pythoners.difference(linuxers): {pythoners.difference(linuxers)}")

pythoners-linuxers: {'tank', 'jason', 'sean'}

pythoners.difference(linuxers): {'tank', 'jason', 'sean'}

6.^对称差集

# str之^对称差集

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

print(f"pythoners^linuxers: {pythoners^linuxers}")

print(

f"pythoners.symmetric_difference(linuxers): {pythoners.symmetric_difference(linuxers)}")

pythoners^linuxers: {'egon', 'tank', 'kevin', 'jason', 'sean'}

pythoners.symmetric_difference(linuxers): {'egon', 'tank', 'kevin', 'jason', 'sean'}

7.==

# str之==

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

javers = {'nick', 'egon', 'kevin'}

print(f"pythoners==linuxers: {pythoners==linuxers}")

print(f"javers==linuxers: {javers==linuxers}")

pythoners==linuxers: False

javers==linuxers: True

8.父集:>、>=

# str之父集:>、>=

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

javaers = {'jason', 'nick'}

print(f"pythoners>linuxers: {pythoners>linuxers}")

print(f"pythoners>=linuxers: {pythoners>=linuxers}")

print(f"pythoners>=javaers: {pythoners>=javaers}")

print(f"pythoners.issuperset(javaers): {pythoners.issuperset(javaers)}")

pythoners>linuxers: False

pythoners>=linuxers: False

pythoners>=javaers: True

pythoners.issuperset(javaers): True

9.子集:

# str之子集:

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

javaers = {'jason', 'nick'}

print(f"pythoners

print(f"pythoners<=linuxers: {pythoners<=linuxers}")

print(f"javaers.issubset(javaers): {javaers.issubset(javaers)}")

pythoners

pythoners<=linuxers: False

javaers.issubset(javaers): True

1.2 需要掌握(****)

add

remove

difference_update

discard

isdisjoint

1.add()

# set之add()

s = {1, 2, 'a'}

s.add(3)

print(s)

{1, 2, 3, 'a'}

2.remove()

# set之remove()

s = {1, 2, 'a'}

s.remove(1)

print(s)

{2, 'a'}

3.difference_update()

# str之difference_update()

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

pythoners.difference_update(linuxers)

print(f"pythoners.difference_update(linuxers): {pythoners}")

pythoners.difference_update(linuxers): {'tank', 'jason', 'sean'}

4.discard()

# set之discard()

s = {1, 2, 'a'}

# s.remove(3) # 报错

s.discard(3)

print(s)

{1, 2, 'a'}

5.isdisjoint()

# set之isdisjoint(),集合没有共同的部分返回True,否则返回False

pythoners = {'jason', 'nick', 'tank', 'sean'}

linuxers = {'nick', 'egon', 'kevin'}

pythoners.isdisjoint(linuxers)

print(f"pythoners.isdisjoint(linuxers): {pythoners.isdisjoint(linuxers)}")

pythoners.isdisjoint(linuxers): False

二、练习

有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

stu_info_list = [

{'name':'nick','age':19,'sex':'male'},

{'name':'egon','age':18,'sex':'male'},

{'name':'tank','age':20,'sex':'female'},

{'name':'tank','age':20,'sex':'female'},

{'name':'egon','age':18,'sex':'male'},

]

stu_info_list = [

{'name': 'nick', 'age': 19, 'sex': 'male'},

{'name': 'egon', 'age': 18, 'sex': 'male'},

{'name': 'tank', 'age': 20, 'sex': 'female'},

{'name': 'tank', 'age': 20, 'sex': 'female'},

{'name': 'egon', 'age': 18, 'sex': 'male'},

]

new_stu_info_list = []

for stu_info in stu_info_list:

if stu_info not in new_stu_info_list:

new_stu_info_list.append(stu_info)

for new_stu_info in new_stu_info_list:

print(new_stu_info)

{'name': 'nick', 'age': 19, 'sex': 'male'}

{'name': 'egon', 'age': 18, 'sex': 'male'}

{'name': 'tank', 'age': 20, 'sex': 'female'}

4.存一个值or多个值:多个值,且值为不可变类型。

5.有序or无序:无序

s = {1, 2, 'a'}

print(f'first:{id(s)}')

s.add(3)

print(f'second:{id(s)}')

first:4480523848

second:4480523848

6.可变or不可变:可变数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值