• 0507Python基础-set-深浅copy


    1、基础数据类型的补充。

    1,元组
    tu1 = ('laonanhai')
    tu2 = ('laonanhai',)
    print(tu1, type(tu1))
    print(tu2, type(tu2))

    tu1 = (1)
    tu2 = (1,)
    print(tu1, type(tu1))
    print(tu2, type(tu2))

    元组里面如果只有一个元素且没有逗号,则该数据的数据类型与里面的元素相同。
    tu1 = ([1, 2, 3])
    tu2 = ([1, 2, 3],)
    print(tu1, type(tu1))
    print(tu2, type(tu2))

    list
    l1 = [111, 222, 333, 444, 555, ]
    索引为奇数对应的所有元素全部删除。
    方法一:
    del l1[1::2]
    print(l1)
    方法二错误展示:
    for index in range(len(l1)):
        print('删除之前的index:%s' % index)
        print('删除之前的l1:%s' % l1)
        if index % 2 == 1:
            del l1[index]
        print('删除之后的index:%s' % index)
        print('删除之后的l1:%s' % l1)
    print(l1)
    在循环一个列表时,最好不要改变列表的大小,会影响你的最终结果。
    倒着删除。
    for index in range(len(l1)-1, -1, -1):
        if index % 2 == 1:
            del l1[index]
    print(l1)
    dict
    dic = dict.fromkeys('abc',666)
    print(dic)
    dic = dict.fromkeys([11,22,33],666)
    print(dic)
    dic = dict.fromkeys([1,2,3],[])
    dic[1].append(666)
    print(dic)

    在循环dict中,最好不要改变dict的大小,会影响结果或者报错。
    dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3','name': 'alex'}
    for i in dic:
        if 'k' in i:
            del dic[i]
    l1 = []
    for key in dic:
        if 'k' in key:
            l1.append(key)
    # print(l1)
    for key in l1:
        del dic[key]
    print(dic)

    数据类型的转换:

    str ---> list split
    list --> str join

    tuple ---> list
    tu1 = (1, 2, 3)
    l1 = list(tu1)
    print(l1)
    tu2 = tuple(l1)
    print(tu2)

    dic ----> list  list(dic)(列表中的元素只有key)

    dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3',}
    l1 = list(dic)
    print(l1)
    print(list(dic.keys()))
    print(list(dic.values()))
    print(list(dic.items()))

    0, '', [], () {}  ---> bool 都是Fasle
    print(bool([0, 0, 0]))

    2、基础数据类型 set。

            集合是一个可变的数据类型,他是以{}形式存在的,空集合set(),

        但是它要求它里面的元素是不可变的,集合是无序的,不重复的。

            1,去重。

            2,关系测试。


    set1 = {1, 2, 3, 'abc', (1,2,3), True, }
    print(set1)
    set2 = {11, 11, 11, 22}
    print(set2)
    列表的去重
    l1 = [11, 11, 22, 22, 33, 33, 33, 44]
    l2 = list(set(l1))
    l2.sort()
    print(l2)

    set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}

    set1.add('太白')
    print(set1)

    set1.update('abc')
    set1.update([111, 2222, 333])
    print(set1)

    remove按元素删除
    set1.remove('RiTiAn')
    print(set1)
    随机删除,有返回值 pop
    print(set1.pop())
    print(set1)

    清空clear
    set1.clear()
    print(set1)

    删除整体 del
    del set1
    print(set1)

    # 查
    for i in set1:
        print(i)

    set1 = {1, 2, 3, 4, 5}
    set2 = {4, 5, 6, 7, 8}
    交集 & intersetion
    set3 = set1 & set2
    print(set3)
    print(set1.intersection(set2))
    并集 | union
    print(set1 | set2)
    print(set1.union(set2))
    差集 - difference
    print(set1 - set2)  # set1 独有
    print(set2.difference(set1))  # set2 独有

    反交集 ^  symmetric_difference
    print(set1 ^ set2)
    print(set1.symmetric_difference(set2))

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

    print(set1 < set2)  # True set1 是set2的子集
    print(set1.issubset(set2))  # True set1 是set2的子集

    print(set2 > set1)  # True set2 是set1的超集
    print(set2.issuperset(set1))  # True set2 是set1的超集

    set1 = frozenset({1, 2, 3, 'alex'})
    print(set1,type(set1))

    04,深浅copy。

    l1 = [1, 2, 3]
    l2 = l1
    l3 = l2
    l3.append(666)
    print(l1, l2, l3)
    对于赋值运算来说,指向的都是同一个内存地址,一变都变。
    深浅copy

    浅copy
    l1 = [11, 22, 33]
    l2 = l1.copy()
    l1.append(666)
    print(l1, id(l1))
    print(l2, id(l2))
    l1 = [11, 22, ['barry', [55, 66]], [11, 22]]
    l2 = l1.copy()
    l1[2].append('alex')
    print(l1,id(l1))
    print(l2,id(l2))
    print(l1, id(l1[-1]))
    print(l2, id(l2[-1]))
    对于浅copy来说,对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始
    ,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    深copy
    import copy
    l1 = [11, 22, 33]
    l2 = copy.deepcopy(l1)
    l1.append(666)
    print(l1, id(l1))
    print(l2, id(l2))

    l1 = [11, 22, ['barry']]
    l2 = copy.deepcopy(l1)
    l1[2].append('alex')
    print(l1, id(l1[-1]))
    print(l2, id(l2[-1]))
    深copy 完全独立。
    s1 = 'alex'
    s2 = 'alex'
    l1 = [1, 2, 3]
    l2 = [1, 2, 3]
    l1.append(666)
    print(l1, l2)

    对于切片来说,这是浅copy。
    l1 = [1, 2, 3, 4, 5, 6, [11,22]]
    l2 = l1[:]
    l1.append(666)
    print(l1, l2)
    l1[-1].append(666)
    print(l1, l2)

  • 相关阅读:
    计蒜客 移除数组中的重复元素 (双指针扫描)
    计蒜客 寻找插入位置 (二分查找)
    poj 1007 DNA Sorting
    全排列函数 nyoj 366(next_permutation()函数)
    nyoj 202 红黑树
    nyoj 92 图像有用区域
    nyoj 82 迷宫寻宝(一)
    nyoj 58 最少步数
    nyoj 43 24 Point game
    nyoj 42 一笔画问题
  • 原文地址:https://www.cnblogs.com/dzh0394/p/9002934.html
Copyright © 2020-2023  润新知