作者mantour (朱子)
看板Python
标题Re: [问题] 奇怪的问题...
时间Thu Mar 27 17:51:43 2008
sorry 看不太懂
我这样理解不知道对不对
for i in L:
L.remove(i)
的效果相当於
i=0
while i < len(L):
L.remove(L[i])
i=i+1
所以如果本来L=['a','b','c','d','e']
i=0时
L.remove(L[0])之後 L 变成 ['b','c','d','e']
所以i=1时
L.remove(L[1]),去掉的会是'c',而'b'就被跳过了
不知道这样想对不对?
※ 引述《chmate ([][][])》之铭言:
: 推 Yawper:原来如此 虽然不了解为何会被跳过 但还是谢谢 =.= 03/27 13:34
: python的list内部是array类的东西
: 在iteration时移除一个element
: 内部的index并不会被改变
: 少了一个element但index没变
: 就有些被跳过了
: python的list在remove或del後
: iteration会变成未定义的状态
: 大部份的language通常都这样做
: C++的STL和Java也是
: 因为做出仍然有效的iterator非常麻烦且困难
: 如果还是需要这种型式的写法
: 可以这样做
: for i in a[:]:
: ...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.213.158
1F:推 chmate:是的 不过这跟内部实作有关 最好别依赖这种行为 03/27 18:24
2F:→ mantour:谢谢 03/27 19:16
3F:推 rexrainbow:从list的尾端开始删除 03/28 18:22
4F:推 silveran:从list的尾端开始删除 +1 04/08 17:03