一个简单的python列表程序获取索引错误

一个简单的python列表程序获取索引错误,python,python-3.x,Python,Python 3.x,很抱歉问这个问题。这是一个简单的python程序 odd = lambda x : bool(x % 2) numbers = [n for n in range(10)] print numbers for i in range(len(numbers)): if numbers[i]%2!=0: del numbers[i] print numbers 运行此程序时出现错误 回溯(最近一次呼叫最后一次): 文件“test.py”,第5行,在 如果数字[i]%

很抱歉问这个问题。这是一个简单的python程序

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
print numbers
for i in range(len(numbers)):
    if numbers[i]%2!=0:
        del numbers[i]
    print numbers
运行此程序时出现错误
回溯(最近一次呼叫最后一次):
文件“test.py”,第5行,在
如果数字[i]%2=0:
索引器:列表索引超出范围


我试了很多东西,但都没用,有人能帮我吗

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
print numbers
for i in numbers[::-1]:
    print i
    if i%2!=0:
        del numbers[numbers.index(i)]
print numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9
8
7
6
5
4
3
2
1
0
[0, 2, 4, 6, 8]
[num for num in numbers if not odd(num)]
 [0, 2, 4, 6, 8]
如果在循环时确实
需要删除列表
可以反向循环列表并删除元素,它不会停止迭代,因为它将在正常方向(左-->右)删除元素,而循环在相反方向(右-->左)

代码:

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
print numbers
for i in numbers[::-1]:
    print i
    if i%2!=0:
        del numbers[numbers.index(i)]
print numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9
8
7
6
5
4
3
2
1
0
[0, 2, 4, 6, 8]
[num for num in numbers if not odd(num)]
 [0, 2, 4, 6, 8]
输出:

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
print numbers
for i in numbers[::-1]:
    print i
    if i%2!=0:
        del numbers[numbers.index(i)]
print numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9
8
7
6
5
4
3
2
1
0
[0, 2, 4, 6, 8]
[num for num in numbers if not odd(num)]
 [0, 2, 4, 6, 8]
或者更简单地说,
列表理解和lambda函数如何

代码1:

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
print numbers
for i in numbers[::-1]:
    print i
    if i%2!=0:
        del numbers[numbers.index(i)]
print numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9
8
7
6
5
4
3
2
1
0
[0, 2, 4, 6, 8]
[num for num in numbers if not odd(num)]
 [0, 2, 4, 6, 8]
输出1:

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
print numbers
for i in numbers[::-1]:
    print i
    if i%2!=0:
        del numbers[numbers.index(i)]
print numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9
8
7
6
5
4
3
2
1
0
[0, 2, 4, 6, 8]
[num for num in numbers if not odd(num)]
 [0, 2, 4, 6, 8]

这是因为您正在删除循环中的元素,而不是将其保存在其他循环中list@VigneshKalai有没有办法删除元素为什么需要奇数lambda函数?可能与@khelwood重复什么错误?您使用的是
i
作为列表中的项目,而不是索引,因此
pop(i)
不合适。为什么不干脆
a=[i%2==0时b中的i为i]