快速提高编程能力--python之编程易错点深究1

文摘   2023-04-29 15:38   河南  

Python,在上个世纪90年代末就已出现,距今也20多年了。如今,随着人工智能的迅速发展,python的欢迎度也在逐年提高,常年稳居编程语言排行榜前几名,在机器学习领域用途甚广。


相较于C语言,python语言可以说是简直不要太好学!然而,不要大意,在编程中仍然存在许多易错点,而这些往往非常难以发现,十分令人头疼。


好,废话不多说,进入正题。

     

#列表a=[1,2,3,4]b=ab[0]=125print(a==b)print(a)print(b)
结果:True  [125, 2, 3, 4][125, 2, 3, 4]
解释:可以想象有一个箱子,开始时a指向它,把a赋值给b后,b也指向它,所以,只要修改a或b任意一个,都会导致箱子中内容的改变,同时,又因a与b都指向它,所以自然相等。为了验证此说法我们可以print(id(a))print(id(b))
结果:1979430423360  #不同的电脑可能id值不相同,但a与b的id值肯定相等1979430423360
字典类型亦是如此


#集合a={23,54,'gh',(10,'54y'),67}print(a)
结果:{67, 'gh', 54, 23, (10, '54y')}
print(a[0])#报错!
b={1,2,3,4,3,3}print(b)结果:{1, 2, 3, 4}解释:集合是无序的,同时不没有索引和位置的概念,且元素不重复。



#元组a=("red","green","blue")print(a[0])
结果reda[0]="balck"#报错解释:一旦创建就不能修改


#append与extenda=[2,3,4,5]b=[7,8,9]c=a.append(b)print(c)print(a)
结果:None[2, 3, 4, 5, [7, 8, 9]]
a=[2,3,4,5]b=[7,8,9]c=a.extend(b)print(c)print(a)
结果:None[2, 3, 4, 5, 7, 8, 9]解释:append是将要添加的对象不改变就添加原列表的末尾,且列表使用append方法时并不会再产生一个新列表,仅仅是改变原列表。extend则是将要添加的对象进行改变,也就是把对象拆开了,再加到原列表的末尾。


python中复数实现(-2)**0.5和开根号sqrt(-2)的区别:(-2)**0.5和sqrt(-2)是不同的,前者是复数而后者是会报错的


a = [3,6,9,12,15]for i in a:    if i % 3 == 0:        a.remove(i)print(a)
结果:[6, 12]解释:python解释器对于for的处理,会使用一个变量记录当前所遍历的位置p,每一轮遍历后,p都会增加1,当在遍历时改变了遍历对象时,如上面代码对a进行了remove处理,则p会指向改变后的遍历对象的该位置例如开始p = 0, 此时a[0] = 3,被remove掉,然后p = 1,此时a = [6,9,12,15],则当前i = a[1] = 9,也即6被跳过处理了,最终上面代码的运行结果为[6,12]。处理办法:a = [3,6,9,12,15]for i in a[:]: if i % 3 == 0: a.remove(i)print(a)
结果:[]
a=[1,2,3,4,5]for i in a: a.remove(i)print(a)
结果:[2, 4]原因同上,解决办法:a=[1,2,3,4,5]for i in range(len(a)-1,-1,-1): a.pop(i)print(a)注意:只要遇到遍历操作,且对象在改变,就要非常注意!












点击"在看"了解更多精彩内容


math and code
计算机专业研究生在读,拥有深厚的计算机科学和数学背景,对编程、算法、数据结构、深度学习等领域都有着深入的了解和实践经验。对编程语言的掌握熟练而全面,无论是主流的Python、Java,还是强大的C++、Go,都能轻松驾驭。