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


    1.用算法判断某⼀一个字符串串是否是⼩小数

    s17 = "-123.12"
    s17 = s17.replace("-", "") #替换掉负号
    if s17.isdigit():
        print("是整数")
    else:
        if s17.count(".") == 1 and not s17.startswith(".") and not s17.endswith("."):
            print("是⼩数")
        else:
            print("不不是⼩小数")


    2.循环删除列列表中的每⼀一个元素

       分析: for的运⾏行行过程. 会有⼀一个指针来记录当前循环的元素是哪⼀一个, ⼀一开始这个指针指向第0 个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第⼀一个的元素会⾃自动的变成 第0个. 然后指针向后移动⼀一次, 指向1元素.  这时原来的1已经变成了了0, 也就不会被删除了;循环删除都不行. 不论是⽤用del还是⽤用remove.pop都不行.

    li = [11, 22, 33, 44]
    for e in li:
        li.remove(e)
    print(li)
    li = [11, 22, 33, 44]
    for el in li:
        li.pop()    # pop也不不⾏行行
    print(li)
    li = [11, 22, 33, 44]
    for i in range(0, len(li)):
        del li[i]
    print(li)
    # i= 0, 1, 2  删除的时候li[0] 被删除之后. 后⾯面⼀一个就变成了了第0个. 
    # 以此类推. 当i = 2的时候. list中只有⼀一个元素. 但是这个时候删除的是第2个 肯定报错啊

    结果[22,44]

    li = [11, 22, 33, 44]
    for i in range(0,len(li)):   # 循环len(li)次, 然后从后往前删除
        li.pop()
    print(li)
     或者使用whlie循环,由于删除元素会导致元素的索引改变, 所以容易易出现问题. 尽量量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另⼀一个集合中然后再批量量删除. 
    .
    count = len(li)
    while count > 0:
        count = count - 1 #倒着删除
        del li[count]
    
    print(li)


    3.fromkeys与append连续使用时的错误
       分析:代码中只是更更改了了jay那个列列表. 但是由于jay和JJ⽤用的是同⼀一个列列表. 所以. 前⾯面那个改了了. 后 ⾯面那个也会跟着改
    dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
    print(dic)
    lst = dic.get('jay').append("湖大")
    print(dic)
    
    结果:
    {'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
    {'jay': ['周杰伦', '麻花藤', '湖大'], 'JJ': ['周杰伦', '麻花藤', '湖大']}

        假设开始定义了dic 则不会出现这个错误,

    dic = {'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
    print(dic)
    lst = dic.get('jay').append("湖大")
    print(dic)
    
    结果:
    {'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
    {'jay': ['周杰伦', '麻花藤', '湖大'], 'JJ': ['周杰伦', '麻花藤']}

    4. 循环删除字典的元素

    dict中的元素在迭代过程中是不允许进⾏行行删除的,把要删除的元素暂时先保存在⼀一个list中, 然后循环list, 再删除

    dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦金金⽼老老板'}
    # 删除key中带有'k'的元素
    for k in dic:
        if 'k' in k:
            del dic[k]
    # 在循环迭 代的时候不不允许进⾏行行删除操作
    print(dic)

    把要删除的元素暂时先保存在⼀一个list中, 然后循环list, 再删除

    dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦金金⽼老老板'}
    dic_del_list = []
    # 删除key中带有'k'的元素
    for k in dic:
        if 'k' in k:
            dic_del_list.append(k)
    for el in dic_del_list:
        del dic[el]
    print(dic)

    5. set 元素变更 无法直接修改,只能结合remove和add  使用

    6  对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量量. 并不是复制⼀一份内容. 所以. lst1的内存指向和lst2是⼀一样的. lst1改变了了, lst2也发⽣生了了改变

    lst1 = ["⾦金金⽑毛狮王", "紫衫⻰龙王", "⽩白眉鹰王", "⻘青翼蝠王"]
    lst2 = lst1
    print(lst1)
    print(lst2)
    lst1.append("杨逍")
    print(lst1)
    print(lst2)
    
    dic1 = {"id": 123, "name": "谢逊"}
    dic2 = dic1
    print(dic1)
    print(dic2)
    dic1['name'] = "范瑶"
    print(dic1)
    print(dic2)
    
    结果如下:
    ['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王']
    ['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王']
    ['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王', '杨逍']
    ['⾦金金⽑毛狮王', '紫衫⻰龙王', '⽩白眉鹰王', '⻘青翼蝠王', '杨逍']
    {'id': 123, 'name': '谢逊'}
    {'id': 123, 'name': '谢逊'}
    {'id': 123, 'name': '范瑶'}
    {'id': 123, 'name': '范瑶'}

        尝试 copy[浅拷⻉. 只会拷贝第⼀层. 第⼆层(也就是嵌套的列表元素)的内容不会拷贝. 所以被称为浅拷⻉贝,简单说 嵌套的改变,那也会一起改变]和deepcopy[不会因任何改变而改变]

    lst1 = ["何炅", "杜海海涛","周渝⺠民"]
    lst2 = lst1.copy()
    lst1.append("李李嘉诚")
    print(lst1)
    print(lst2)
    print(id(lst1),id(lst2))
    结果如下:
    ['何炅', '杜海海涛', '周渝⺠民', '李李嘉诚']
    ['何炅', '杜海海涛', '周渝⺠民']
    1793001742920 1793001742984
                                                                             














































































  • 相关阅读:
    vm扩容
    手算二维离散傅里叶变换
    取消vim模式匹配的高亮
    DS DI ES SI等等
    int and Integer
    为什么超类能引用子类的对象
    voltile解析
    java集合
    疑问:无限定通配符
    layui table 导出
  • 原文地址:https://www.cnblogs.com/rango0550/p/10215941.html
Copyright © 2011-2022 走看看