day7 集合 深浅copy

 

1昨日内容回顾

小数据池:
int  -5~256
str  特殊字符,*数字20


ascii :  8位 1字节  表示1个字符
unicode  32位  4个字节  表示一个字符
utf- 8  1个英文 8位,1个字节
        欧洲 16位   两个字节  表示一个字符
        亚洲 24位   三个字节  表示一个字符

gbk    1个英文 8位,1个字节
        亚洲 16位   两个字节  表示一个字符

s = 'alex'
b = s.encode('utf-8')
print(b)  # b'alex'

1,基础数据类型汇总补充
str
int
list
    在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错。
bool
dict
    1,fromkeys()

tuple
2,集合set
3,深浅copy

2 基础数据类型汇总

字符串 列表

#str
print(''.isspace())
#list
lis=[11,22,33,44,55]
for i in range(len(lis)):
    print(i,lis[i])    ###i=lis的索引值
    # del lis[i]      #循环列表时删除元素时 索引值会改变,从而报错 1[22, 44, 55]2[22, 44]3

<<<
False
0 11
1 22
2 33
3 44
4 55
lis=[11,22,33,44,55]
# 打印出lis中的奇数的三种方法:
# 第一种   #按切片取值
lis=lis[::2]
print("\n")
print(lis)

# 第二种    添加到一个新列表里面
lis=[11,22,33,44,55]
li=[]
for i in lis:  #i是list里面的元素 注意和range区分
    if lis.index(i)%2!=1:
        li.append(i)
lis=li
print(lis)
# 第三种  #反向删除列表中的元素
lis=[11,22,33,44,55]
for i in range(len(lis)-1,-1,-1):  #删除列表的元素要想索引值不改变 可以反向删除
# for i in range(len(lis)):
    if i%2==1:
        # print(i)
        del lis[i]
        # print(lis)
print(lis)


<<<
[11, 33, 55]
[11, 33, 55]
[11, 33, 55]

字典

# dic
dic=dict.fromkeys(range(1,4),"春哥")  #keys必须是可迭代对象(序列) eg:字符串 列表 元祖 range
print(dic)
dic=dict.fromkeys(range(1,4),[])
dic[1].append("园姐")  #只有列表有append的方法
print(dic)
dic[2].append("二哥")
print(dic)
#循环时不能删除字典 会报错

1 #创建一个空字典
dic={'k1':"v1",'k2':"v2","a3":"v3"}
dic1={}
for i in dic:
    if "k" in i:
        dic1.setdefault(i,dic[i])
dic=dic1
print(dic)
# 2把字典中的元素放到一个空列表 再对空列表循环
dic={'k1':"v1",'k2':"v2","a3":"v3"}
l=[]
for i in dic:
    if "k" not in i:
        l.append(i)
for i in l:
    del dic[i]
print(dic)

<<<
{1: '春哥', 2: '春哥', 3: '春哥'}
{1: ['园姐'], 2: ['园姐'], 3: ['园姐']}
{1: ['园姐', '二哥'], 2: ['园姐', '二哥'], 3: ['园姐', '二哥']}
{'k1': 'v1', 'k2': 'v2'}
{'k1': 'v1', 'k2': 'v2'}

元祖

tu1=([1],)
tu2=([1])
print(tu1,tu2,type(tu1),type(tu2))
<<<
([1],) [1] <class 'tuple'> <class 'list'>

集合

#集合:可变的数据类型,它里面的元素必须是不可变的数据类型,无序,不重复
set1={'alex','wusir','ritian','egon','barry'}
set2=set({1,2,3})
print(set1,set2,type(set1),type(set2))
#
set1.add('女神')
set1.update('abc')
print(set1)

#
set2={'alex','wusir','ritian','egon','barry'}
print(set2.pop())#随机删除 有返回值
print(set2)
print(set2.remove('alex')) #按元素删除 返回None
print(set2)
print(set2.clear()) #清空clear 返回None,清空完原集合成为空集 set() 不是{}(与字典区分)
print(set2)
del set2 #删除集合

#
set3={'alex','wusir','ritian','egon','barry'}
for i in set3: #无序返回集合的每一个元素
    print(i)

#集合的交并
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))
print(set1-set2) #set1独有的
print(set1.difference(set2))
#比较集合
set1={1,2,3}
set2={1,2,3,4,5,6}
print(set1<set2)
print(set1.issubset(set2)) #set1是set2的子集
print(set2>set1)
print(set2.issuperset(set1)) #集合set2是1的超集

#去重
li=[1,2,33,33,4,6,6,8,8,9,9,9]
set4=set(li) #把列表转换成集合
print(set4)
li=list(set4)
print(li)

s=frozenset('barry') # frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
for i in s:           #没有add,pop等操作
    print(i)

<<<
{'ritian', 'barry', 'alex', 'wusir', 'egon'} {1, 2, 3} <class 'set'> <class 'set'>
{'ritian', 'barry', 'alex', '女神', 'c', 'a', 'wusir', 'egon', 'b'}
ritian
{'barry', 'alex', 'wusir', 'egon'}
None
{'barry', 'wusir', 'egon'}
None
set()
ritian
barry
alex
wusir
egon
{4, 5}
{4, 5}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 6, 7, 8}
{1, 2, 3, 6, 7, 8}
{1, 2, 3}
{1, 2, 3}
True
True
True
True
{1, 2, 33, 4, 6, 8, 9}
[1, 2, 33, 4, 6, 8, 9]
b
y
r
a

深浅copy

'''直接赋值:其实就是对象的引用(别名)。

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。'''
#深浅copy
#赋值
l1=[]
l2=l1
l3=l1
l3.append("a")
print(l1,l2,l3,id(l1),id(l2),id(l3))

#copy 浅拷贝
l1=[1,2,[4,5,6],3]
l2=l1.copy()
print(l1,l2,id(l1),id(l2))
l1.append('a')
print(l1,l2,id(l1),id(l2))   #第一层地址不相同  第一层l2不会随l1改变
l1[2].append('a')
print(l1,l2,id(l1),id(l2))
print(id(l1[2]),id(l2[2])) #重点  第二层地址及以上地址相同

import copy
l1=[1,2,[4,5,6],3]
l2=copy.deepcopy(l1)
print(l1,l2,id(l1),id(l2))
l1[2].append('a')
print(l1,l2,id(l1),id(l2))
print(id(l1[2]),id(l2[2]))   #深拷贝与浅拷贝的区别是 不管多少层 俩个列表完全独立

l1=[1,[1],2,3,4]
l2=l1[:] #也是浅拷贝 相当于l2=l1.copy()
print(l1,l2,id(l1),id(l2))
l1[1].append('a')
print(l1,l2,id(l1[1]),id(l2[1]))
<<< ['a'] ['a'] ['a'] 1927665312328 1927665312328 1927665312328 [1, 2, [4, 5, 6], 3] [1, 2, [4, 5, 6], 3] 1927696924744 1927696884808 [1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3] 1927696924744 1927696884808 [1, 2, [4, 5, 6, 'a'], 3, 'a'] [1, 2, [4, 5, 6, 'a'], 3] 1927696924744 1927696884808 1927697092360 1927697092360 [1, 2, [4, 5, 6], 3] [1, 2, [4, 5, 6], 3] 1927697037384 1927696924744 [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3] 1927697037384 1927696924744 1927697038792 1927697037192 [1, [1], 2, 3, 4] [1, [1], 2, 3, 4] 1927697092360 1927697037384 [1, [1, 'a'], 2, 3, 4] [1, [1, 'a'], 2, 3, 4] 1927696884808 1927696884808
l1=['alex','taibai','wusir','egon']
for i in l1:
    print(l1.index(i),i)

for index,i in enumerate(l1,1):
    print(index,i)


<<<
0 alex
1 taibai
2 wusir
3 egon
1 alex
2 taibai
3 wusir
4 egon

猜你喜欢

转载自www.cnblogs.com/hi-python/p/10085527.html