Python-day07_2018.7.10(补充知识点,set集合的介绍及相关操作)
今日主要内容:
一.基础数据类型的补充
1.
① li = ["a","b","c"]
s = "_".join(li)
print(s) ====> a_b_c 在li的中间插入"_"
②li = ["a","b","c"]
li2 = ["1","2"]
s = li2.join(li)
print(s) =====>a,1,2,b,1,2,c # 将列表2中的"1","2"分别插入到li中
2.在lis,dic等的for循环过程中不可以执行删除元素的操作,因为删除元素会导致整个索引过程其他元素的索引发生改变.
注!! 在执行索引的过程中原来的索引会随着删除而发生改变,从而影响后面的遍历.
方法: 可以将要删除的元素先保存在一个lst中,然后再遍历lst中的每个元素,在原来列表中把lst中的每个元素依次删除. lst = ["周杰伦 ","周润发","周星星","麻花藤","周树人"] #找到姓"周"的人的姓名,并删除.
# del_lis = []
# for el in lst:
# if el[0] == "周":
# del_lis.append(el)
# print(del_lis)
# for el in del_lis:
# lst.remove(el)
# print(lst)
#将lst中姓名里,姓氏为周的人民删除,先把要删除的名字放到del_lis中,让后再遍历del_lis,将元素依次删除就可以了.
二.set集合
set集合里存放,无序,不重复的元素,并且,元素是可以哈希的(int,str,tuple,bool)
①因为set中存放不重复,无序元素,所以,可以使用集合去重
方法: lst==>转换成set形式==>然后再将set形转换成lst形式
set集合的增删改查
1.增加
s = {"刘嘉玲","关之琳","王祖贤"}
a.
s.add("郑裕玲") #如果没有这个元素,则添加,如果有的话就不执行添加操作了
b.
s.update("麻花藤") #迭代添加,将"麻""花""藤"分别添加到s集合中.
2.删除
s = {"刘嘉玲","关之琳","王祖贤","张曼玉"}
a.
item = s.pop() #随机弹出一个
b.
s.remove("关之琳") #直接删除元素 !!!!如果元素不存在的话,程序会报错!!!!
c.
s.clear() #清空set集合,输出结果剩下空集合===> set()
3.修改
#set存放无序数据,灭有索引,所以没法进行遍历,修改方法如下
① 删除要修改的元素 ② 添加要修改之后的元素 例如: A-->B
s.remove(A)
s.add(B)
4.查询
#set是一额可迭代对象,所以可以进行for循环.
5.常用操作
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯科长","皮长山"}
a.交集 print(s1 & s2) ===>皮长山 #两个集合中全部都出现过的
b.并集 print(s1 | s2) ====>{"刘能","赵四","皮长山","刘科长","冯科长"} #俩个集合合并之后的集合
c.差集 print(s1 - s2) ====>{"刘能","赵四"} #s1集合,减去两个集合共有的元素
d.反差集 print(s1 ^ s2) ===>{"刘能","赵四","刘科长","冯科长"} #两个集合中除去交集之后的所有元素
三.深浅拷贝
lst1 = ["刘能","赵四","皮长山"]
lst2 = lst1 #将lst1中元素的对应的内存地址传给lst2.所以,随后,无论对s1,还是s2进行操作,都是对内存中的同一个位置的元素进行操作,
浅拷贝;
lst1 = ["何炅","杜海涛","周渝民",["麻花藤","马云"]]
lst2 = lst1.copy() #copy只是对第一层的值进行拷贝,对第二层的(比如["麻花藤","马云"]) 还是传递一个内存地址,没有复制拷贝值,所以如果lst1和lst2对["麻花藤","马云"]进行操作,内存中的列表都会发生改变,所以,lst1,lst2打印出来的原列表还是发生了改变.
深拷贝:
import copy
lst2 = copy.deepcopy(lst1)
深度拷贝,把元旦内部元素完全进行拷贝复制,不糊出现一个改变另一个的问题.
# 1. 判断一个数是否是水仙花数, 水仙花数是一个三位数,
# 三位数的每一位的三次方的和还等于这个数.那这个数就是一个水仙花数,
# 例如: 153 = 1**3 + 5**3 + 3**3
#题目1
# sum = 0
# while True:
# num = str(input("请输入一个3位:")).strip()
# if len(num) == 3:
# for i in num:
# sum = sum + int(i)**3
# if sum == int(num):
# print("是水仙数.")
# else:
# print("不是水仙数")
# else:
# print("输入的数字不是3位数,不符合要求,请重新输入!!1")
#拓展-----输出所有的水仙数 153,370,371,407
# for i in range(100,1000):
# sum = 0
# for el in str(i):
# # print(el)
# sum = sum + int(el)**3
# if sum == int(i):
# print(i,end=" ")
# else:
# continue
# 2. 给出一个纯数字列表. 请对列表进行排序(升级题).
# lst = [3,5,7,3,2,1,8,9,5,8,9,10,11,45,100,56,32,21]
# count = 0
# print(lst)
# while count < len(lst)-1:
# i = 0
# while i < len(lst) - 1:
# if lst[i + 1] < lst[i]:
# lst[i], lst[i + 1] = lst[i + 1], lst[i]
# else:
# pass
# i += 1
# count += 1
# print(lst)
# 3. 完成彩票36选7的功能. 从36个数中随机的产生7个数. 最终获取到7个不重复的数据作为最终的开奖结果.
# 随机数:
# import random
# s = set()
# while True:
# a = random.randint(1, 36)
# s.add(a)
# if len(s)<7:
# pass
# else:
# break
# print(s)
# 4. 税务部门征收所得税. 规定如下:
# 1). 收入在2000以下的. 免征.
# 2). 收入在2000-4000的, 超过2000部分要征收3%的税.
# 3). 收入在4000-6000的, 超过4000部分要征收5%的税.
# 4). 收入在6000-10000的, 超过6000部分要征收8%的税.
# 4). 收入在10000以上的, 超过部分征收20%的税.
# num = int(input("请输入你的工资:").strip())
# if num <= 2000:
# print(num)
# elif num <= 4000:
# print("%s" % (num-(num-2000)*0.03))
# elif num <= 6000:
# print("%s" % (num-60-(num-4000)*0.05))
# elif num <= 10000:
# print("%s" % (num-160-(num-6000)*0.08))
# else:
# print("%s" % (num-480-(num-10000)*0.2))