zoukankan      html  css  js  c++  java
  • Python学习

    1、集合:

      集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

        a)去重,把一个列表变成集合,就自动去重了。

        b)关系测试,测试两组数据之前的交集、差集、并集等关系。

    2、集合的创建

    set1 = set({1,2,'barry'})
    set2 = {1,2,'barry'}
    print(set1,set2)
    # {1, 2, 'barry'} {1, 2, 'barry'}

    3、集合的增(add,update)

      add:随机添加

    set1 = {'罗伊人','林拜','熊青春','白力勤','陈香'}
    set1.add('郑秋冬')
    print(set1)

      update:迭代增加,随机

    set1 = set()
    set1.update('郑秋冬')
    print(set1)
    set1.update(['罗伊人','熊青春','贾衣玫'])
    print(set1)

    4、集合的删(remove(),pop(),clear(),del)

    set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
    
    set1.remove('白力勤')
    print(set1)
    
    print(set1.pop(),set1)
    
    set1.clear()
    print(set1)
    
    del set1
    print(set1)

    5、集合的查(for循环)

    set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
    
    for i in set1:
        print(i)

    6、集合的其他操作

      1)交集( & intersection)

    set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
    set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}
    print(set1 & set2)
    print(set1.intersection(set2))
    
    # {'罗伊人', '熊青春', '贾衣玫'}

      2)并集( | union)

    set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
    set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}
    
    print(set1 | set2)
    print(set1,set2,set2.union(set1))

      3)差集( - difference)

    set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
    set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}
    
    print(set1 - set2)
    print(set1.difference(set2))

      4)反交集( ^ symmetric_difference)

    set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
    set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}
    
    print(set1 ^ set2)
    print(set1.symmetric_difference(set2))

      5)子集与超级

    set1 = {'罗伊人','熊青春','贾衣玫'}
    set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}
    
    print(set1 < set2)
    print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
    
    print(set2 > set1)
    print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

      6)frozenset不可变集合,让集合变成不可变类型。

    s = frozenset('barry')
    print(s,type(s))

    7、深浅copy

      1)赋值运算

        对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

    l1 = [1,2,3,['barry','alex']]
    l2 = l1
    
    l1[0] = 111
    print(l1)  # [111, 2, 3, ['barry', 'alex']]
    print(l2)  # [111, 2, 3, ['barry', 'alex']]
    
    l1[3][0] = 'wusir'
    print(l1)  # [111, 2, 3, ['wusir', 'alex']]
    print(l2)  # [111, 2, 3, ['wusir', 'alex']]

      2)浅拷贝copy

        对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    l1 = [1,2,3,['barry','alex']]
    l2 = l1.copy()
    print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2794248428424
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2794248428616
    l1[1] = 222
    print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2794248428424
    l1[3][0] = 'wusir'
    print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2794248428680
    print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 2794248428680

      3)深拷贝deepcopy

        对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

    import copy
    l1 = [1,2,3,['barry','alex']]
    l2 = copy.deepcopy(l1)
    
    print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2792837924552
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2792837926088
    
    l1[1] = 222
    print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2792837924552
    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2792837926088
    
    l1[3][0] = 'wusir'
    print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2792837897224
    print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2792837935496
  • 相关阅读:
    个人工作总结2
    个人工作总结1
    《梦断代码》阅读笔记01
    构建之法阅读笔记4
    四则运算-安卓版
    最大联通子数组之和(dfs,记忆化搜索,状态压缩)
    第五周进度报告
    第四周进度报告
    最大子数列之和问题
    构建之法阅读笔记3
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9353140.html
Copyright © 2011-2022 走看看