Python习题
Posted 芒果侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Python习题的主要内容,如果未能解决你的问题,请参考以下文章
笨办法学 Python(第三版)习题 18: 命名变量代码函数