python基础期七数据类型扩充,set及深潜copy

基础数据类型的知识补充
1.元祖
如果元祖的中的元素只有一个且没有逗号,则‘元祖’的数据类型与该元素的数据类型相同。
tu1= (1)
tu11 =(1,)
print(tu1,type(tu1),tu11,type(tu11))

tu2 = ('a')
tu22 = ('a','b')
print(tu2,type(tu2),tu22,type(tu22))

tu3 = ([1,2,3])
tu33 = ([1,2,3],)
print(tu3,type(tu3),tu33,type(tu33))

tu4 = ({1:'sunf'})
tu44 =({1:'sunf'},)
print(tu4,type(tu4),tu44,type(tu44))

2.列表
列表和列表可以相加,可以和数字相乘(或列表中的某个数字元素),但列表不能相除或相减
l1 =[1,2,3,4]
l2 = ['a','b','c','d']
l3 = l1+l2
print(l3)
print(l2*l1[2])

2.1 在列表进行循环或者遍历时删除列表中某个元素,则此元素后面的元素则会像前一位,列表的索引发生改变。
建议删除时可以从后往前删除
删除列表中索引为奇数的元素
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
方法一:切片加步长
del l1[1::2]
print(l1)
方法二:在列表循环过程中从后往前删除
for i in range(len(l1)-1,-1,-1):
if i %2 ==1:
l1.pop(i)
print(l1)
方法三:将保留的元素追加一个新列表,然后在赋值给原列表
l2 = []
for i in range(len(l1)):
if i % 2 == 0:
l2.append(l1[i])
print(l2)
l1 = l2
print(l1)
方法四:将删除的元素追加一个新列表,然后循环匹配原列表的元素,将相的删除
l2 = []
for i in range(len(l1)):
if i % 2 == 1:
l2.append(l1[i])
for x in l2:
if x in l1: 此句可以不要
l1.remove(x)
print(l2)
print(l1)

3.字典
3.1字典在循环的过程中删除元素会报错。因为在字典在遍历的过程中不允许改变字典的范围。
dic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'}
将 dic的键中含有k元素的所有键值对删除。
for key in dic:
if 'k' in key:
dic.pop(key)
dictionary changed size during iteration: 在循环一个字典时,不能改变字典的大小。
l1 = []
for key in dic:
if 'k' in key:
l1.append(key)
# print(l1)
for key in l1:
dic.pop(key)
print(dic)

3.2 创建字典方法
1.直接创建
dic ={1:2,3:4}
print(dic)

2.dict()方法
dic2 = dict({'a':'b'})
print(dic2)

3. dict.formkeys()方法
dic3 = dict.fromkeys([1,2,3,4],[9,8,7,6])
print(dic3)
注意:dict.fromkeys(seq=[1,2,3,4],value=[]) 如果vlaue是一个可变对象(list,dict),则创建的字典中多有的值有一个发生改变,全不
都改变,因为他们在内存中采用的公共地址池。

数据类型的转换
1.str,int,lsit三者之间的转换
str <---> int 字符和数字可以相互转换,但是str转换为int时必须str中的元素必须为数字
str <---> list 字符转list用str.split()方法;列表list转str用列表的'*'.jion(list)方法,但是list中的元素只能是str字符串类型
list =['a','b','c',4] #列表中含有整型,则会报错(TypeError: sequence item 3: expected str instance, int found)
s = '-'.join(list)
print(s,type(s))
dict.keys() dict.values() dict.items() list()
tuple <---> list 直接相互转换
dict ---> list 直接将字典转换为list时,用list(dict),转换出来的时keys的列表
不能将list直接转换为字典dict(list)
dic1 = {1:2,3:4,5:6}
lst1 = list(dic1)
print(lst1,type(lst1))

# l2 = ['name', 'age']
# dic2 = dict(l2)
# print(dic2)

深浅拷贝
赋值运算
l1 = [1,2,3]
l2 = l1
l1.append(666)
print(l2)
print(id(l1))
print(id(l2))


浅copy
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666)
print(l2)

l1 = [1,2,3,[22,]]
l2 = l1.copy()
# l1.append(666)
# print(l1,l2)
l1[-1].append('taibai')
# print(l1,l2)
print(id(l1))
print(id(l2))
print(id(l1[-1]))
print(id(l2[-1]))
深copy
import copy
l1 = [1,2,3,[22,]]
l2 = copy.deepcopy(l1)
# print(l1,l2)
# l1.append(666)
l1[-1].append('太白')
print(l2)

集合set
set:
{'wusir', 'alex', 1, 2, 3}
集合要求里面的元素必须是不可变的数据类型,但是集合本身是可变的数据类型。
集合里面的元素不重复(天然去重),无序。
主要用途:
1,去重。
2,关系测试。
set1 = {'alex', [1,2], 1,2,3}
set1 = {'alex', 'wusir'}
set2 = set({'alex', 'wusir'})
print(set2)

面试必考:list去重 *****
l1 = [1,1,2,3,4,4,3,2,1,5,5]
set1 = set(l1)
l2 = list(set1)
print(l2)


set1 = {'alex','wusir','ritian','egon','barry'}

set1.add('女神')
print(set1)

set1.update('abc')
print(set1)


set1.remove('alex')
print(set1)
set1.pop()
print(set1)
set1.clear()
print(set1)

del set1
print(set1)

关系测试

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

交集
print(set1 & set2)
print(set1.intersection(set2))

并集
print(set1 | set2)
print(set1.union(set2))

反交集

print(set1 ^ set2)
print(set1.symmetric_difference(set2))

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
差集
print(set1 - set2)
print(set1.difference(set2))

子集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2) # True
print(set1.issubset(set2))

超集
print(set2 > set1)
print(set2.issuperset(set1))

set1 = {1,2,3}
set3 = frozenset(set1)
print(set3) # 不可变的数据类型。 ***
posted @ 2018-08-12 22:08  麒麟610  阅读(282)  评论(0编辑  收藏  举报