Python 学习日记day 6

本文记录了作者在学习Python过程中遇到的常见错误,包括误将字典当作集合使用、二分查找法实现错误导致死循环,以及在遍历列表时修改列表导致的迭代问题。通过这些例子,作者深入理解了集合、字典、列表等数据结构的特性和使用注意事项,并探讨了正确处理这些问题的方法。
摘要由CSDN通过智能技术生成

内容:这几天我写的bug总结

1 :当时看川川的资料,然后写了一个好像是排序什么的我想用集合的不重复性来着(虽然这做不出来那个答案,但我逻辑上认为可以的)然后就直接定义了一个’A={}‘我一直以为他是集合,直到一直报错,然后看了一下type(类型)才发现dict型,然后查阅一些资料才知道集合定义是’set()‘,而’A={}‘是字典型,所以报错.

2:看其他资料学二分法的时候,逻辑清楚了,但是二分法用错了,我用的是‘(max-min)/2’这会导致求的值的范围缩小到正常值之外,陷入死循环,并值保持不变。

3:用for循环打印列表数值的时候,比如

x=[2,2,2,2,2,1]
for i in x:
    x.remove(2)
print(x)

打印出来会发现结果[2,2,1]这是由于在循环过程中x列表长度发生了变化,从而使迭代次数发生变化,这边就需要定义另一个变量y

x=[2,2,2,2,2,1]
y=x
for i in y:
    x.remove(2)
print(x)
 
结果:
[2, 2, 1]

按逻辑上来说这样定义没什么毛病,可是这就是毛病,我当时问我师父来着,他就嫌弃了我一下午,说‘c语言的指针没学过吗???赋值的时候是俩个变量进同一个地址!!!’然后我验证了一下:

x=[2,2,2,2,2,1]
y=x
print(id(x))
print(id(y))
for i in y:
    x.remove(2)
print(x)
 
结果:
2275877563840
2275877563840
[2, 2, 1]

果然共用了地址,然后我就查了一下,发现了赋值方法:

x=[2,2,2,2,2,1]
y=x[:]
print(id(x))
print(id(y))
print(type(x))
for i in x:
    y.remove(2)
print(y)
 
结果:
1791685209536
1791685178560
<class 'list'>
Traceback (most recent call last):
  File "C:\Users\昊123\PycharmProjects\pythonProject\main.py", line 251, in <module>
    y.remove(2)
ValueError: list.remove(x): x not in list

就很离谱的报错了,为啥呢 ,因为循环到第六次的时候,y里面只剩下1了已经remove不了2了所以就报错了。

ps:他报错的时候我也心慌慌来着,不过看了看就知道为啥了,因为remove会有限制不过集合里面的discard就比较牛逼了,这边换成集合然后用这个函数他不会报错。

x={2,2,2,2,2,1}
y=set(x)
print(id(x))
print(id(y))
print(type(x))
for i in x:
    y.discard(2)
print(y)
 
 
 
结果:
1599125596064
1599128691520
<class 'set'>
{1}

这边其实只迭代俩次,集合是无重复的无序的数列嘛。

好了,说这么多有的没的,反正写给自己看的,也没啥人会看,问题不是很大,自己能没事干的时候看看自己写的东西就行了,好好重温一下自己的傻逼时光!!!

前几天的日记写的真的有点稀巴烂的感觉,幸亏不是自己发,可能会尬死吧。问题不是很大,慢慢来吧,毕竟确实是第一次俩次三次写。明天的话我准备写一下自己爬虫第一课来着,可是其实基础没学的特别好,可能还会写一点c#或者halcon的东西,毕竟我是做这方面的,太难了。不过我还是蛮想着学好python的!!!

每天一遍 防止早恋!!!

跟我一起读“我爱学习,学习使我快乐,学习是我进步的阶梯!!!”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值