美文网首页
一道有趣但伤感的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