Python集合应用题-分析每队活动投票情况

题目

第一小队有五名队员,序号是1,2,3,4,5; 第二小队也有五名队员,序号6,7,8,9,10。

输入一个得票队员的编号的字符串,求第一、二小队没有得票的队员。在一行中输入得票的队员的序列号,用逗号隔开。

输入格式:

在一行中输入得票的队员的序列号,用逗号隔开。

输出格式:

在第一行中输出第一小队没有得票的队员序号,用空格分开;

在第二行中输出第二小队没有得票的队员序号,用空格分开。

输入样例:

1,5,9,3,9,1,1,7,5,7,7,3,3,1,5,7,4,4,5,4,9,5,10,9 

输出样例:

2
6 8

思路

使用集合,利用集合操作符运算出,第一、二小队没有得票的队员。

集合

&:交集运算,使用 & 连接多个集合,可获得交集部分,即相同的元素。

 | :并集运算,使用 | 连接多个集合 , 得到全部集合中全部的元素。

+:合并集合

-:差集

^:异或集,获取只在一个集合中出现的元素

<:x<z,x是z的真子集或z是x的真超集,则返回True

>:x>z,  z是x的真子集或x是z的真超集,则返回True

<=:x<=z,x是z的子集或z是x的超集,则返回True

>=:x>=z,  z是x的子集或x是z的超集,则返回True

真子集

真子集:即不包括集合本身的所有子集

示例:

x={'d', 'b', 'a', 'c'}
s={'d','b'}
s<x
#-->True

x={'d', 'b', 'a', 'c'}
s={'d','b','c','a'}
s<x
#-->False

子集
如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集
任何一个集合是它本身的子集
空集是任何集合的子集
用 <= 或 issubset() 方法

 

示例:

x={'d', 'b', 'a', 'c'}
s={'d','b'}
print(s<=x)
#-->True

x={'d', 'b', 'a', 'c'}
s={'d','b','c','a'}
print(s<=x)
#-->True

 

 

实现

初步实现

代码:

set1=set([1,2,3,4,5])
set2=set([6,7,8,9,10])
ticketSet=set(map(int,input().split(',')))
noTicketInFirst=set1-(set1&ticketSet)
noTicketInSec=set2-(set2&ticketSet)
for elem in noTicketInFirst:
    print(elem,end=" ")
print()#Default this end char is /n
for elem in noTicketInSec:
    print(elem,end=" ")

 结果

2 
8 6 

上面的实现正确得到的了第一、二小队没有得票的队员。

优化

要实现与题目一模一样的即可我们还需要删除最后元素的空格,以及对最终结果进行排序。

代码:

set1=set([1,2,3,4,5])
set2=set([6,7,8,9,10])
ticketSet=set(map(int,input().split(',')))
noTicketInFirst=sorted(list(set1-(set1&ticketSet)))
noTicketInSec=sorted(list(set2-(set2&ticketSet)))
noTicketInFirstStr=""
noTicketInSecStr=""
for elem in noTicketInFirst:
    noTicketInFirstStr+=(str(elem)+" ")
for elem in noTicketInSec:
    noTicketInSecStr+=(str(elem)+" ")
noTicketInFirstStr=noTicketInFirstStr.strip()
noTicketInSecStr=noTicketInSecStr.strip()
print(noTicketInFirstStr)
print(noTicketInSecStr,end="")

结果

2
6 8

 

 

 

 

作者:Miracle
来源:麦瑞克博客
链接:https://www.unitymake.com/archives/programming-life/2029
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
Python集合应用题-分析每队活动投票情况
题目 第一小队有五名队员,序号是1,2,3,4,5; 第二小队也有五名队员,序号6,7,8,9,10。 输入一个得票队员的编号的字符串,求第一、二小队没有得票的队员。在一……
<<上一篇
下一篇>>
文章目录
关闭
目 录