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))

 


















 

posted @ 2018-07-10 15:00  Anna_kc  阅读(219)  评论(0编辑  收藏  举报