Python for循环 不能删除相邻元素?

Array1=range(20)foriinArray1:ifi>=5andi<=17:Array1.remove(i)printArray1###输出###[0,1,2... Array1 = range(20)
for i in Array1:
if i>=5 and i<=17:
Array1.remove(i)

print Array1

### 输出 ###
[0, 1, 2, 3, 4, 6, 8, 10, 12, 14, 16, 18, 19]

Array2 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
for i in Array2:
if i>=5 and i<=17:
Array2.remove(i)

print Array2

### 输出 ###
[1, 3, 7, 11, 15, 19]

我想把大于5且小于17的元素删掉
但是这样写不能删除相邻元素?
比如Array1,把5删掉了,5后面的是6,结果把6跳过了,6后面是7,7被删了,同样,7后面的8却没有删掉

这是为什么?
展开
 我来答
lucifer_001
2015-03-03 · TA获得超过684个赞
知道小有建树答主
回答量:414
采纳率:0%
帮助的人:411万
展开全部
Array1 = range(20)
for i in Array1:
    print i
    if i>=5 and i<=17:
        Array1.remove(i)

## 输出结果
0
1
2
3
4
5
7
9
11
13
15
17
19

在循环中修改列表就会导致这样的结果。

当访问Array1[5]时删掉了5,此时Array1[5] = 6  Array1[6] = 7

下一个循环访问Array1[6]= 7   原本的6就跳过了

追问
那有什么办法让指针前移一个元素吗?
比如从 Array1[5] 回到 Array1[4]
追答
Array1 = range(20)
print filter(lambda i:not (i>=5 and i <=17),Array1)

用filter就解决啦

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式