Python,在上个世纪90年代末就已出现,距今也20多年了。如今,随着人工智能的迅速发展,python的欢迎度也在逐年提高,常年稳居编程语言排行榜前几名,在机器学习领域用途甚广。
相较于C语言,python语言可以说是简直不要太好学!然而,不要大意,在编程中仍然存在许多易错点,而这些往往非常难以发现,十分令人头疼。
好,废话不多说,进入正题。
#列表
a=[1,2,3,4]
b=a
b[0]=125
print(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])
结果
red
a[0]="balck"#报错
解释:一旦创建就不能修改
#append与extend
a=[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)
注意:只要遇到遍历操作,且对象在改变,就要非常注意!