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
                                                                         














































































posted @ 2019-01-03 17:51  芒果侠  阅读(146)  评论(0编辑  收藏  举报