集合运算
已知某公司的职员有经理(manager)和技术员(technician)。
请用集合解决以下问题:
将既是经理又是技术员的职员保存到集合 set1 中,并输出
将是经理但不是技术员的职员保存到集合 set2 中,并输出
将是技术员但不是经理的职员保存到集合 set3 中,并输出
将身兼一职的职员保存到集合 set4 中,并输出
判断 张飞 是否是经理,如果是经理,输出「yes」;如果不是经理,输出「no」
求出经理和技术员有几人,并将结果输出
注意:集合 manager 与 technician 已存在,可以直接使用
# 将既是经理又是技术员的职员保存到集合 set1 中,并输出
set1 = manager & technician
print(set1)
# 将是经理但不是技术员的职员保存到集合 set2 中,并输出
set2 = manager - technician
print(set2)
# 将是技术员但不是经理的职员保存到集合 set3 中,并输出
set3 =technician - manager
print(set3)
# 将身兼一职的职员保存到集合 set4 中,并输出
set4 = manager ^ technician
print(set4)
# 判断 张飞 是否是经理
set5 = {"张飞"}
if set5 < manager:
print("「yes」")
else:
print("「no」")
# 求出经理和技术员有几人,并将结果输出
print("经理和技术员有{}人".format(len(manager | technician)))
集合的关系
分别创建两个集合set1和set2,并判断两个集合是否满足超集关系、子集关系。具体要求如下:
set1 = {2, 3, 4, 5, 6}
set2 = {2, 4, 6}
(1)若set1包含set2,且有set2没有的元素,则返回set1是set2的真超集,set2是set1的真子集;
(2)若set2包含set1,且有set1没有的元素,则返回set2是set1的真超集,set1是set2的真子集;
(3)若set2和set1一样,则返回set1和set2互为子集;
(4)其它情况则返回set1和set2没有关系;
# 创建两个集合
set1 = {2, 3, 4, 5, 6}
set2 = {2, 4, 6}
# 判断两集合关系
superset = set1.issuperset(set2)#判断指定集合的所有元素是否都包含在原始的集合中
true_subset = set1.issubset(set2)#判断集合的所有元素是否都包含在指定集合中
if(superset):
print("set1是set2的真超集,set2是set1的真子集")
elif(true_subset):
print("set2是set1的真超集,set1是set2的真子集")
elif(set1==set2):
print("set1和set2互为子集")
else:
print("set1和set2没有关系")
集合综合练习
已知某学校的某次考试成绩分班级保存在集合 score1, score2, score3, score4, score5 中,5个集合都已存在,可直接使用。
请用集合解决以下问题:
突然发现 score1 的数据格式为列表,请将 score1 转换为集合,并将集合 score1 输出
使用 add() 方法将数据 10 添加到集合 score2 中,并将集合 score2 输出
使用 update() 方法将数据 {11, 12, 13} 添加到集合 score3 中,并将集合 score3 输出
使用 remove() 方法将数据 83 从集合 score4 中删除,并将集合 score4 输出
使用 clear() 方法将集合 score5 中的数据清空,并将集合 score5 输出
# 将 score1 转换为集合
score1 = set(score1)
print(score1)
# 将 10 添加到 score2 中
score2.add(10)
print(score2)
# 将 {11, 12, 13} 添加到 score3 中
score3.update({11,12,13})
print(score3)
# 将 83 从 score4 中删除
score4.remove(83)
print(score4)
# 将 score5 清空
score5.clear()
print(score5)
元组元素抓7
请用程序实现:找出元组 tuple_pre 中元素是 7 的倍数或个位为 7 的数,并将计算结果输出。
注意:元组 tuple_pre 已存在,可以直接使用 tuple_pre。
# 打印输出 tuple_pre
print(tuple_pre)
# 请计算元组 tuple_pre 中元素是7的倍数及个位为7的数,并将计算结果输出
for i in tuple_pre:
if i % 7 == 0 or i % 10 == 7:
print(i)
元组解包
“*” 的使用。在对一个元组进行解包时,变量的数量必须和元组中的元素数量一致,也可以在变量前边添加一个 * 号,这样变量将会获取元组中所有剩余的元素。
点击运行,查看结果。
my_tuple = 10, 20, 30, 40
# 在对一个元组进行解包时,变量的数量必须和元组中的元素的数量一致
# 也可以在变量前边添加一个*,这样变量将会获取元组中所有剩余的元素
a, b, *c = my_tuple
print('1. a =', a, 'b =', b, 'c =', c)
a, *b, c = my_tuple
print('2. a =', a, 'b =', b, 'c =', c)
*a, b, c = my_tuple
print('3. a =', a, 'b =', b, 'c =', c)
a, b, *c = [1, 2, 3, 4, 5, 6, 7]
print('4. a =', a, 'b =', b, 'c =', c)
a, b, *c = 'hello world'
print('5. a =', a, 'b =', b, 'c =', c)
# 不能同时出现两个或以上的*变量
# *a , *b , c = my_tuple
升序降序
编写程序,将列表中的前10个元素升序排列,后10个元素降序排列,并输出结果。
注意:列表 list_pre 已存在,可以直接使用 list_pre。
# 打印输出 list_pre
print(list_pre)
# 请对上面列表中的元素进行排序
y = list_pre[0:10]
y.sort()
list_pre[0:10] = y
y = list_pre[10:20]
y.sort(reverse=True)
list_pre[10:20] = y
print(list_pre)
截取部分元素
请用程序实现
将列表list_pre中的部分元素截取到列表list_new中。
输入格式
在两行中分别输入两个非负整数,表示需要截取的索引段,且第一个数小于第二个数。
输出格式
将截取出的列表输出即可。
示例 1
输入
3
5
输出
[53, 36, 42]
示例 2
输入
2
6
输出
[54, 53, 36, 42, 2]
list_pre = [23, 7, 54, 53, 36, 42, 2, 24, 76, 70, 18, 35, 44, 1, 9, 6, 8, 75, 49]
# 请使用 input() 输入两个正整数 begin, end
begin = int(input('请输入第一个索引: '))
end = int(input('请输入第二个索引: '))
# 将列表 list_pre 中下标从 begin(含) 到 end(含) 的元素截取到列表 list_new 中,并将 list_new 输出
list_new = list_pre[begin:end+1]
print(list_new)
判断元素是否在列表中存在
请用程序实现:判断指定元素是否存在于列表 list_test 中。
注意:要求分别用 for 循环与 in 关键字完成练习,列表 list_test 已存在,可以直接使用 list_test。
运行你的程序,使控制台显示如下内容:
查看 4 是否在列表中(使用循环):
存在
查看 4 是否在列表中(使用 in 关键字):
存在
# 打印输出 list_test
print(list_test)
# 使用for循环判断元素 4 是否存在于 list_test 列表中
print("查看 4 是否在列表中(使用循环): ")
for i in list_test:
if i==4:
print("存在")
# 使用in关键字判断元素 4 是否存在于 list_test 列表中
print("查看 4 是否在列表中(使用 in 关键字): ")
if(4 in list_test):
print("存在")
头尾对调
请用程序实现:将列表 list_ht 中的头尾两个元素对调,并将对调的结果输出。
注意:列表 list_ht 已存在,可以直接使用 list_ht。
# 打印输出 list_ht
print(list_ht)
# 将列表 list_ht 中的头尾两个元素对调,并将对调的结果输出
list_ht[0],list_ht[-1]=list_ht[-1],list_ht[0]
print(list_ht)
翻转列表
请用程序实现,将列表 list_reverse 翻转,并将翻转后的列表输出。
注意:列表 list_reverse 已存在,可以直接使用 list_reverse。
通过下面的例子来解释翻转列表。
翻转前 : list = [10, 11, 12, 13, 14, 15]
翻转后 : list = [15, 14, 13, 12,11, 10]
# 打印输出 list_reverse
print(list_reverse)
# 将列表翻转
list_reverse.reverse()
print(list_reverse)
指定元素对调
请用程序实现,将列表list_swap 中所指定的元素对调到列表的尾部,并输出对调后的列表,如下图所示。
注意:列表 list_swap 已存在,可以直接使用 list_swap。
# 打印输出 list_swap
print(list_swap)
# 将列表 list_swap 中的第1、2个元素对调到列表的尾部
list_add=[]
for i in range(2,7):
list_add.append(list_swap[i])
for i in range(2):
list_add.append(list_swap[i])
print(list_add)
约瑟夫生者死者小游戏
一条船上有 num 个人(num为偶数),超载了,需要一半的人下船。于是人们排成一排,排队的位置即为他们的编号。他们从头开始从 1 开始报数,数到某个数字的人下船,并且下一个人又从 1 开始报数,如此循环,直到船上只有原来一半人为止。
请用程序实现:输入表示船上总人数的偶数 num 和需要下船的特殊数字 special_num,输出下船人的编号。
运行你的程序,使控制台显示如下内容:
请输入船上的总人数: 30
请输入需要下船的特殊数字: 9
9
18
27
6
16
26
7
19
30
12
24
8
22
5
23
# 请使用 input() 输入 num 和 special_num
num=int(input('请输入船上的总人数:'))
special_num=int(input('请输入需要下船的特殊数字: '))
# 请输出下船人的编号
people = []
for i in range(1, num + 1):
people.append(i)
length = int(len(people) / 2)
report_number = 1
while len(people) > length:
if report_number != special_num:
pp = people.pop(0)#用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
people.append(pp)
else:
pp = people.pop(0)
print(pp)
report_number = 0
report_number += 1