美文网首页
一道有趣但伤感的python面试题

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

作者: 吃个小烧饼 | 来源:发表于2018-03-31 04:23 被阅读57次

前几天面完了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]

相关文章

网友评论

      本文标题:一道有趣但伤感的python面试题

      本文链接:https://www.haomeiwen.com/subject/zkywcftx.html