Knight_day7

  • 其他

    gbk的bytes --> utf-8的bytes

    decode    encode

    注:英文,数字,特殊字符可直接转化,因为都是基于ASCⅡ。

    enumerate(interable, 初始索引) 生成(索引, 元素)的二元数组的可迭代对象。(for index, i in ...)

    打印时使用format格式化输出加 \t 等时更美观

  • 基础数据类型补充

    1.元组中只有一个数据,且没有逗号,则该“元组”与里面数据类型相同。

tu1 = (1,)
tu2 = ('alex')
tu3 = ([1, 2, 3],)
print(tu1, type(tu1))
print(tu2, type(tu2))
print(tu3, type(tu3))
'''
(1,) <class 'tuple'>
alex <class 'str'>
([1, 2, 3],) <class 'tuple'>
'''

    2.列表与列表可以相加

    3.循环列表(可变数据)时最好不要改变列表大小,如增/删某些元素。

          可倒序操作;或将结果添加到新列表中;或将要删除元素添加到新列表中再循环新列表删除。

    4.字典的创建:1.dic = {}

           2.dic = dict({}) 实例化对象

           3.fromkeys:{}.fromkeys(interable, 默认值)或dict.fromkeys(interable, 默认值)。注意默认值设为[]时是同一个列表,在内存指向相同地址。

    5.数据类型转换:1.int str bool之间

            2.str <--> bytes

            3.str <--> list

#str --> list
s1 = 'alex wusir taibai'
l1 = s1.split()
print(l1)
#list -->str
l2 = ['alex', 'wusir', 'taibai']
s2 = ' '.join(l2)
print(s2)
'''
['alex', 'wusir', 'taibai']
alex wusir taibai <class 'str'>
'''

            4.list(dict.keys / values / items)

            5.tuple <--> list

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

            6.dic --> list:把键转成列表

             list --> dic不可以

            7. 转bool值为False:0,'',[],{},set() --> bool 为False

  • 集合set

    {'wusir', 'alex', 1, 2, 3}

    定义:set1 = {'wusir', 'alex', 1, 2, 3}或set1 = set({'wusir', 'alex', 1, 2, 3})

    要求里面元素必须是不可变的数据类型,但集合本身是可变数据类型。集合里面元素不重复(天然去重),无序。

    主要用途:1.去重 2.关系测试

    list去重(重点必考):

l1 = [1, 2, 3, 1, 2, 3, 4, 5, 4, 5]
set1 = set(l1)
l2 = list(set1)
print(set1)
print(l2)
'''
{1, 2, 3, 4, 5}
[1, 2, 3, 4, 5]
'''

    增:

      set.add() 无序

      set.update(interable) 相当于列表的extend,但也是无序的。

    删:

      remove(元素)

      pop() 随机删除

      clear() 清空。空集合表示为set()与字典区分

      del 删除集合

    关系测试:

      交集:set1 & set2 或 set1.intersection(set2)

      并集:set1 | set2 或 set1.union(set2)

      反交集:set1 ^ set2 或 set1.symmetric_difference(set2) 

      差集(set1中set2没有的):set1 - set2 或 set.difference(set2)

      子集:set1 < set2 或 set.issubset(set2)

      超集:set2 > set1 或 set2.issuperset(set1)

    frozenset冻集合:将集合变为不可变数据类型,能作为字典中的key

      set1 = {1, 2, 3}

      set2 = frozenset(set1)

  • 深浅copy

    赋值运算:

l1 = [1, 2, 3]
l2 = l1
l1.append(666)
print(l2)
print(id(l1), id(l2))
'''
[1, 2, 3, 666]
2491353239048 2491353239048
'''

    浅copy:第一层独立,第二层开始到更深,都使用一个内存地址。 

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

l1 = [1, 2, 3, [44, 55]]
l2 = l1.copy()
l1[-1].append(666)
print(l2)
print(id(l1), id(l2))
print(id(l1[-1]), id(l2[-1]))
'''
[1, 2, 3]
1759860329992 1759860329928
[1, 2, 3, [44, 55, 666]]
1759860329736 1759860329992
1759860329800 1759860329800
'''

Knight_day7

 

 

     深copy:

      import copy

      copy.deepcopy(...)

import copy
l1 = [1, 2, 3, [44, 55]]
l2 = copy.deepcopy(l1)
l1[-1].append(666)
print(l2)
print(id(l1), id(l2))
print(id(l1[-1]), id(l2[-1]))
'''
[1, 2, 3, [44, 55]]
1941077986568 1941077984136
1941077986632 1941077984456
'''

      Knight_day7

    应用场景:1.面试

         2.完全独立copy一份数据,与原数据没有关系,用深copy

         3.如果一份数据(列表)第二层开始要与原数据共用,浅copy

    面试题:

l1 = [1, 2, 3, [22, 33]]
l2 = l1[:]
l1[-1].append(666)
print(l2)
'''
[1, 2, 3, [22, 33, 666]]
切片是浅copy
'''

 

上一篇:临时数据文件 offline 对于导入导出的影响


下一篇:部分HTTPS网站受影响:Firefox暂停“弃用SHA-1加密”计划