ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Knight_day7

2022-02-08 15:01:13  阅读:180  来源: 互联网

标签:day7 Knight l2 set1 set2 l1 print copy


  • 其他

    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
'''

 

 

     深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
'''

      

    应用场景: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
'''

 

标签:day7,Knight,l2,set1,set2,l1,print,copy
来源: https://www.cnblogs.com/hlzzhq/p/15871263.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有