python常用小技巧&深拷贝浅拷贝&集合

1 交换变量

通过不引用第三方变量

a = 1
b = 2
a = a+b   #3
b = a-b   #1
a = a-b    #2

python 中如何交换

a = 1
b = 2
b,a = a,b   #交换2个变量的值,python底层帮你引入一个第三方变量在交换
print(a,b)    #2  1

2 同时定义多个变量

a=b=c=0   ##同时定义多个变量,定义了3个变量,值都是0

3 深拷贝浅拷贝

#循环删list里面数据的时候,结果会不正确
s = [1,1,2,3,4,5,6,8]
#    0 1 2 3 4 5 6 7    下标 第一次循环
#    [1,2,3,4,5,6,8]
#     0 1 2 3 4 5 6    下标   第二次循环,第一次循环取过下标位0的值,第二次跨过下标为0的值
for i in s:
    if i%2!=0:
        s.remove(i)   #remove删除
print(s)       # [1,2,4,6,8]     

 用循环删除的话,可以定义2个相同的list   一个用来循环,一个用来删除

s = [1,1,2,3,4,5,6,8]
s1 =[1,1,2,3,4,5,6,8]
s3 = s     # 浅拷贝   不能写成 s3=s,因为变量存的是内存地址,s3与s指向同一个内存地址,当s的值发生变化,s3的值同样会发生变化
print(id(s))     #查看内存id
print(id(s3))    #s3的内存地址和s的内存地址一样的
print(id(s1))    #s1和s的内存地址不一样   深拷贝
#浅拷贝和深拷贝的区别,就是深拷贝会开辟一块新的内存空间
for i in s1:
    if i%2!=0:
        s.remove(i)   #remove删除
print(s)       # [2,4,6,8]

集合

集合天生就能去重 ,集合也是无序的

定义一个集合

s = set()
s2 = set('123445533457')
s3 = {1,2,3,4,5,6,5,4,4,7}
print(s2)   #{'7', '2', '4', '1', '3', '5'}
print(s3)    # {1, 2, 3, 4, 5, 6, 7}

集合操作

s = set()
s2 = set('123445533457')
s3 = {'1','2','3','4','5','6','5','8','4','7'}
# print(s2)
# print(s3)
# #交集 两个集合相同的地方
# print(s2  & s3)   #{'3', '4', '2', '5', '1', '7'}
# print(s3.intersection(s2))

#并集 就是把两个集合合并在一起,然后去重
# print(s2 | s3)  #{'6', '5', '3', '7', '1', '8', '4', '2'}
# print(s2.union(s3))
#差集   取一个集合里面存在的另一个集合不存在的
# print(s3-s2)       #{'8', '6'}
# print(s3.difference(s2))
#对称差集    去掉两集合里面都有的
# print(s2 ^ s3)
# print(s2.symmetric_difference(s3))

集合的增删改查
s3.add('23') #加元素 s3.pop() #随机删除一个 s3.remove('5') #指定删除一个元素 s3.update({1,2,3}) #把另一个集合加进去

 集合小练习,校验密码复杂程度

#校验密码复杂程度    校验密码是否包含数字  大写字母  小写字母  特殊字符
import string
nums_set= set(string.digits)
upper_set = set(string.ascii_uppercase)
lower_set = set(string.ascii_lowercase)
pun_set = set(string.punctuation)
for i in range(5):
    pwd = input('请输入密码:').strip()
    pwd_set = set(pwd)
    if pwd_set &nums_set and pwd_set & upper_set and pwd_set & lower_set and pwd_set & pun_set:
        print('密码合法',pwd)
    else:
        print('密码必须包含大写字母,小写字母,数字,特殊字符')

 

 

posted @ 2018-05-21 14:52  xiaomeng15  阅读(192)  评论(0编辑  收藏  举报