python学习笔记------集合

集合元素是不可重复的;
s = {1, 2, 3, 1, 2, 3}
print(s)
列表去重;
names = ['hello', 'world', 'hello']
print(list(set(names)))
集合的特性: (索引, 切片, 重复, 连接,)===> 不支持, 因为无序; 成员操作符, for循环 ===> 支持;
集合是无序的数据类型: 添加元素的顺序和存储的顺序无关;
s = {2,5,8,20}
s
{8, 2, 20, 5}
s.add(6)
s
{2, 5, 6, 8, 20}
print(1 in s)

for i  in s:
    print(i, end='')
集合的增删改查
# 字符替换
s1 = input("s1:")
s2 = input("s2:")
for i in s2:
    if i in s1:
        s1 = s1.replace(i, "")
print(s1)
集合操作
s = {1, 2, 3, 1, 2, 3}
print(s)

# 去重
li = [1, 2, 3, 1, 2, 3]
print(list(set(li)))

s1 = {1, 2, 3}
s2 = {1, 2, 4}

print("并集:", s1.union(s2))
print("交集:", s1.intersection(s2))

# 求交集时, 把s1的值更新为交集的值;
s1.intersection_update(s2)
print(s1)

print(s1.difference(s2))    # s1-instersection(s1,s2)
print(s2.difference(s1))    # s2-intersection(s1,s2)

# 求差集时, 把s2的值更新为差集的值;
print (s2)
print(s2.difference_update(s1))    # s2-union(s1,s2)
print(s2)

s1 = {1, 2, 3}
s2 = {1, 2, 4}
# 对等差分;
print(s1.symmetric_difference(s2))

print(s1 | s2)
print(s1 & s2)
print(s1 - s2)
print(s2 - s1)

math = ['name1', 'name2']
english = ['name1']

s1 = {1, 2, 3}
s2 = {1, 2, 4}

# s1是s2的子集?
print(s1.issubset(s2))

# s1是s2的父集?
print(s1.issuperset(s2))

# s1和s2没有交集么? 如果没有交集True,否则返回False;
print(s1.isdisjoint(s2))


结果:

{1, 2, 3}
[1, 2, 3]
并集: {1, 2, 3, 4}
交集: {1, 2}
{1, 2}
set()
{4}
{1, 2, 4}
None
{4}
{3, 4}
{1, 2, 3, 4}
{1, 2}
{3}
{4}
False
False
False
集合练习
# 1.(华为机试题)题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机
生成了N个1到1000之间的随机整数(N≤1000), N是用不同的数对应着不同的学生
的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。
请你协助明明完成“去重”与“排序”的工作;
import random

print(random.sample(range(1,1000), 10))
print(random.randint(1,1000))

# 将input接收的str,清值转化为int类型;
N = int(input("N:"))
# list, set, tuple(x)

# 定义空集合时, 不能为s={}, 应该是s = set()
s = set()

for i in range(N):   # 4, (0,1,2,3)
    num = random.randint(1,1000)
    # 将随机生成的数加入到集合中;
    s.add(num)
# 对集合进行排序;
print(sorted(s))

结果如下:

[62, 260, 664, 200, 4, 449, 225, 402, 883, 125]
669
N:50
[1, 34, 35, 46, 84, 104, 108, 147, 156, 171, 178, 185, 187, 220, 228, 237, 297, 349, 358, 373, 383, 387, 388, 413, 418, 429, 443, 447, 475, 478, 513, 574, 624, 636, 645, 682, 721, 731, 743, 749, 753, 794, 811, 930, 972, 982, 987, 988, 998]
# 2. 集合练习:
随机产生2组各个数字的列表,每组10个数字,如下要求:
每个数字取值范围[10,20]
统计20个数字中,一共有多少个不同的数字?  # {1,2,3} {2,3,4} # 并集
2组中,不重复的数字有几个?分别是什么?{1,2,3} {1,2,4}  # 对等差分;
2组中,重复的数字有几个?分别是什么?
import random

li1 = []
li2  = []
for i in range(10):
    li1.append(random.randint(10,20))
    li2.append(random.randint(10,20))

print(li1, li2)

s1 = set(li1)
s2 = set(li2)

print("20个数字中共有%s个不同的数字" %(len(s1 | s2)))

sy_set = s1.symmetric_difference(s2)

print("2组中,不重复的数字有%s个, 分别是%s" %(len(sy_set), sy_set))

inster_set = s1 & s2
print("2组中,重复的数字有%s个,分别是%s" %(len(inster_set), inster_set))

结果如下:

[16, 13, 15, 15, 14, 13, 14, 17, 16, 18] [15, 17, 17, 20, 14, 18, 14, 20, 13, 20]
20个数字中共有7个不同的数字
2组中,不重复的数字有2个, 分别是{16, 20}
2组中,重复的数字有5个,分别是{13, 14, 15, 17, 18}

猜你喜欢

转载自blog.csdn.net/qq_41891803/article/details/81416025