python 基础数据类型补充,set集合,深浅拷贝

一,基础数据类型补充

对于join的使用

还有split的使用

lst = ['黄飞鸿','霍元甲','十三姨','鬼脚七']
s = '*'.join(lst)
print(s)
s1 = s.split("*")
print(s1)

 

关于删除列表和删除字典的问题

注意: 由于删除元素会导致元素的索引改变, 所以容易易出现问题. 尽量量不要再循环中直接去删
除元素. 可以把要删除的元素添加到另⼀一个集合中然后再批量量删除.

# # for i in range(0,len(lst)):
# #     lst.pop()
# # print(lst)
li = [11,12,13]
del_li = []
for e in li:
    del_li.append(e)
for s in  del_li:
    li.remove(s)
print(li)

  

dic = {'k1':'alex','k2':'wusir','k3':'金老板'}
lst = []
for k in dic:
    if 'k' in k:
        lst.append(k)
for el in lst:
    del dic[el]
print(dic)

fromkeys

dic = dict.fromkeys(['jay','jj'],['周杰伦','马化腾'])
print(dic)
dic['jay'].append('胡大')
print(dic)

  

类型转换:
元组 => 列列表 list(tuple)
列列表 => 元组 tuple(list)
list=>str str.join(list)
str=>list str.split()
转换成False的数据:
0,'',None,[],(),{},set() ==> False

 

二 set集合

set集合是python的⼀一个基本数据类型. ⼀一般不是很常⽤用. set中的元素是不重复的.⽆无序的.⾥里里
⾯面的元素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但
是不保存value, 只保存key. set也⽤用{}表⽰示
注意: set集合中的元素必须是可hash的, 但是set本身是不可hash得. set是可变的.

set中的元素是不重复的, 且⽆无序的.注意列表和字典都不可以

使⽤用这个特性.我们可以使⽤用set来去掉重复

lst = [45,5,'哈哈',45,'哈哈']
lst = list(set(lst))
print(lst)

  set的增删改查

1增加

add和upade

s = {'刘嘉玲','关之琳','王祖贤'}
s.update('马化腾')
print(s)
s.update(['张曼玉','李若彤','李若彤'])
print(s)

 2 删除

pop

remove

clear

s = {'刘嘉玲','关之琳','王祖贤'}
# item = s.pop()
# # print(s)
# # print(item)
# s.remove('关之琳')
# print(s)
# s.clear()
# print(s)

  

3修改

先删除后添加

s = {'刘嘉玲','关之琳','王祖贤'}
s.remove('刘嘉玲')
s.add('赵本山')
print(s)

  

4查询

for 循环

5常见操作

交集和并集

s1 = {"刘能", "赵四", "⽪皮⻓长⼭山"}
s2 = {"刘科⻓长", "冯乡⻓长", "⽪皮⻓长⼭山"}
# print(s1& s2)
# print(s1.intersection(s2))
print(s1|s2)
print(s1.union(s2))

  

# 差集
print(s1 - s2) # {'赵四', '刘能'} 得到第⼀一个中单独存在的
print(s1.difference(s2)) # {'赵四', '刘能'}
# 反交集
print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡⻓长', '刘能', '刘科⻓长', '赵四'}
print(s1.symmetric_difference(s2)) # {'冯乡⻓长', '刘能', '刘科⻓长', '赵四'}
s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪皮⻓长⼭山"}
# ⼦子集
print(s1 < s2) # set1是set2的⼦子集吗? True
print(s1.issubset(s2))
# 超集
print(s1 > s2) # set1是set2的超集吗? False
print(s1.issuperset(s2))

  set集合本身是可以发生改变的.是不可哈希的,我们可以使用frozenset来保存数据.

frozenset是不可变的,也就是一个可哈希的数据类型

s = frozenset(['赵本山','刘能','皮长山','长跪'])
dic = {s:'123'}
print(dic)

  三深浅拷贝

浅拷贝

一层拷贝

深拷贝

多层拷贝

 

import copy
lst1 = ['何炅','谢娜','杜海涛',['马化腾','马云']]
lst2 = copy.deepcopy(lst1)
lst1[3].append('无敌是多么寂寞')
print(lst1)
print(lst2)
print(id(lst1[3]),id(lst2[3]))

  深度拷⻉贝. 把元素内部的元素完全进⾏行行拷⻉贝复制. 不会产⽣生⼀一个改变另⼀一个跟着
改变的问题

 

posted @ 2018-06-07 15:32  又见芳踪  阅读(155)  评论(0编辑  收藏  举报