一道有趣但伤感的python面试题

前几天面完了tx的内推,二面被拒了。

其实是很不爽的,毕竟我的一面那么好(tx的面试官都很坦率,你问他们评价他们都会直说,如果要被拒了,本次的面试官也会告诉你每轮的评价)。

算了,这道题是:

a = [1, 2, 3, 4]
for i in a:
  a.remove(i)
print(a)

我当时纠结的是,最后如果空了是a变为空list还是直接析构,可是我错了。

因为它根本不会变空。

因为:for会为list生成一个可迭代对象,可以理解为tmp=iter(a),每产生一次结果,就会自动调用next(),而为了产生next,迭代器会记住当前的位置,如果用c++的话来说就是指针指向某个索引。

这样,当next是0的时候,removea[0],此时指向下一个位置,即index=1,可是因为a[0]已经被remove了,此时a[1]就到了a[0]的地方,现在指向的index=1的元素就是a[2]了。当a[2]又remove之后,index=1的元素就是a[3]了,此时它成为了最后一个。

总的来说,过程就是:

index | 0 | 1 | 2 | 3 |
value | 1 | 2 | 3 | 4 |
next == 0
remove a[0]:
index | 0 | 1 | 2 |
value | 2 | 3 | 4 |
next == 1
remove a[1]
index | 0 | 1 |
value | 2 | 4 |
next == end
print: [2, 4]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容