• 基础之你容易忽略的细节


    1.while...else和for...else,废话不多说,直接看代码,不知道结果的可以自行实验。

    1 for i in range(1,6):
    2     if i==3:
    3         break
    4     print(i)
    5 else:
    6     print(777)
    加break就不执行else
    1 for i in range(1,6):
    2     print(i)
    3 else:
    4     print(777)
    不加break执行else

    2.常见的数据类型转换

    #数字转字符串PS:能看懂这波俩个i的同学恭喜你,装饰器的重点你可能一下就理解了
    i=123
    i=str(i)
    print(i,type(i))
    #数字转bool值
    i=123
    i=bool(i)
    print(i,type(i))
    #举个特殊的0
    b=0
    b=bool(b)
    print(b,type(b))
    #万能的字符串除了字典不能直接转,都可以,骚的不行!为什么这么骚,因为人是可迭代对象
    s1='123'
    #字符串转数字,前提是字符串为数字
    s_int=int(s1)
    print(s_int,type(s_int))
    #字符串转列表
    s2='123hjs'
    s_list=list(s2)
    print(s_list,type(s_list))
    #字符串转元组
    s_tuple=tuple(s2)
    print(s_tuple,type(s_tuple))
    #字符串转集合
    s_set=set(s2)
    print(s_set,type(s_set))
    #下面演示一波特殊的空字符串转bool值
    s3=''
    s_bool=bool(s3)
    print(s_bool,type(type))
    #列表转字符串
    lst=['alex','wusir','taibai']
    s_lst=str(lst)
    print(s_lst,type(s_lst))
    #列表转元组
    tuple_lst=tuple(lst)
    print(tuple_lst,type(tuple_lst))
    #列表转集合
    set_lst=set(lst)
    print(set_lst,type(set_lst))
    #特殊的空列表转换bool值
    lst1=[]
    lst2=[None]  # 列表括号里换成'',(),[],类似结果一样还是True
    bool_lst1=bool(lst1)
    bool_lst2=bool(lst2)
    print(bool_lst1,type(bool_lst1))
    print(bool_lst2,type(bool_lst2))
    #元组转列表
    tu=('a',1,None)
    list_tu=list(tu)
    print(list_tu,type(list_tu))
    #元组转集合
    set_tu=set(tu)
    print(set_tu,type(set_tu))
    #元组转字符串
    str_tu=str(tu)
    print(str_tu,type(str_tu))
    #空元组转换bool值依旧是False
    tu1=()
    bool_tu=bool(tu1)
    print(bool_tu,type(bool_tu))
    #集合转列表
    set1={1,'taibai','alex'}
    list_set=list(set1)
    print(list_set,type(list_set))
    #集合转元组
    tuple_set=tuple(set1)
    print(tuple_set,type(tuple_set))
    #集合转字符串
    str_set=str(set1)
    print(str_set,type(str_set))
    #空集合转换bool值
    set2=set()
    bool_set=bool(set2)
    print(bool_set,type(bool_set))
    # 字典转字符串
    dic = {'name': 'taibai', 'age': '18'}
    str_dic = str(dic)
    print(str_dic, type(str_dic))
    # 字典转列表有搞头,因为字典有keys、values、items三个好玩的
    list_dic1 = list(dic.keys())  # 和直接list这个字典一样
    print(list_dic1, type(list_dic1))
    list_dic2 = list(dic.values())
    print(list_dic2, type(list_dic2))
    list_dic3 = list(dic.items())
    print(list_dic3, type(list_dic3))  # 每个键值对生成一个元组组成的列表
    # 字典转元组与转列表一样的,就不一一举例了
    tuple_dic = tuple(dic)
    print(tuple_dic, type(tuple_dic))
    # 字典转集合同楼上
    set_dic = set(dic)
    print(set_dic, type(set_dic))
    # 空字典转bool值
    dic1 = {}
    bool_dic = bool(dic1)
    print(bool_dic, type(bool_dic))

    终于捋完了,但是感觉还差点什么,whatever,先就这些吧,总结一下:字符串是最强的数据类型,能和各个数据类型进行转换;字典因为是键值对形式的数据类型,所以转换起来需要通过调用自己的items方法才能完美转换成和原来一样形态的数据类型(个人理解,有点绕);列表、集合、元组这三个数据类型应该是三个很默契的合伙人,只要是可迭代对象他们就能带你飞;数字就不做赘述了 。

    3.列表、字典的循环操作问题

    列表在循环中,如果进行增删的操作,会改变其索引;与字典在循环中进行增删的操作会改变其大小一个道理,为了解决该问题的方案(字典的例子可以自行实验):

    s = '老男孩都是大佬'
    lst = []
    # s1='_'.join(s)
    # lst=s1.split('_')
    lst.extend(s)  # 先构建一个列表,用一波迭代添加回忆下
    print(lst)
    # 利用新的列表将旧列表的每个元素删除
    lst2 = []
    for i in lst:
        lst2.append(i)
    print(lst)
    for i in lst2:
        lst.remove(i)
    print(lst)
    利用新的列表将旧列表的每个元素删除
    s = '老男孩都是大佬'
    lst=list(s)
    print(lst)
    for i in range(0, len(lst)):
        lst.pop()
    print(lst)
    利用pop()倒序

    4.fromkeys是个蛇精病

    # 把第一个参数中的每一个元素拿出来和第二个参数组成一个键值对
    # 生成出来的键指向的value是同一个对象. 改变其中一个的时候. 另一个也会跟着改变
    dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "林俊杰"])
    dic['jay'].append("蔡依林")
    print(dic)
    dic = {}
    dic.fromkeys(["葫芦娃", "蛇精"], ["冯提莫", "陈一发"])
    print(dic) # 什么都不打印.此处涉及的静态方法的概念,后面面向对象会讲到

    5.深浅copy

    赋值运算俩个内存地址完全一样;

    lst1 = ["金⽑狮王", "紫衫龙王", "⽩眉鹰王", "⻘翼蝠王"]
    lst2 = lst1
    print(lst1,id(lst1))
    print(lst2,id(lst2))
    lst1.append("杨逍")
    print(lst1,id(lst1))
    print(lst2,id(lst2))

    浅copy只能使外层的内存地址变为新的,里层的内存地址还是一样;

    lst1 = ["何炅", "杜海涛", "周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]]
    lst2 = lst1.copy()
    lst1[3].append("⽆敌是多磨寂寞")
    print(lst1,id(lst1))
    print(lst2,id(lst2))
    print(id(lst1[3]), id(lst2[3]))

    深copy所有层都是独立的内存地址。

    import copy
    
    lst1 = ["何炅", "杜海涛", "周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]]
    lst2 = copy.deepcopy(lst1)
    lst1[3].append("⽆敌是多磨寂寞")
    print(lst1)
    print(lst2)
    print(id(lst1[3]), id(lst2[3]))
  • 相关阅读:
    OpenShift提供的免费.net空间 数据库 申请流程图文
    javascript实现全选全取消功能
    编写一个方法来获取页面url对应key的值
    面试题目产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
    面试宝典
    HDU 4619 Warm up 2 贪心或者二分图匹配
    HDU 4669 Mutiples on a circle 数位DP
    HDU 4666 最远曼哈顿距离
    HDU 4035 Maze 概率DP 搜索
    HDU 4089 Activation 概率DP
  • 原文地址:https://www.cnblogs.com/changwentao/p/9152451.html
Copyright © 2020-2023  润新知