前几天面完了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的时候,remove
掉a[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]
网友评论