想去去除数列中的所有奇数项(数学中数列的索引从1 开始)一直报错求?
if name == '__main__':
a=[1,2,3,4,5,6,7,8,9,10]
for i in range(0,len(a)):
if (i+1) % 2 == 0:
print a[i]
a.remove(a[i])
想去去除数列中的所有奇数项(数学中数列的索引从1 开始)一直报错求?
if name == '__main__':
a=[1,2,3,4,5,6,7,8,9,10]
for i in range(0,len(a)):
if (i+1) % 2 == 0:
print a[i]
a.remove(a[i])
第一你的程序逻辑有问题,判断应该为(a[i] + 1) % 2 == 0
第二你在一个长度固定不变的list上remove一个递增下标最后肯定会导致下标越界,因为remove同时list长度减一!
第三你可以使用 a = range(1, 11) 来代替 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = range(1, 10)
[a[i] for i, status in enumerate(map(lambda e : e % 2 == 0, a)) if status]
b=[i for i in a if a%2==0] #这样就得到过滤完毕的数列
当然楼上提到的
b=a[1::2]
更优雅
还有,尽量不要在循环迭代过程中去修改被迭代的数据。。不然会出现意想不到的错误
4 回答4.5k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
len(a) == 10
range(0,10) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
也就是说i的值分别是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
当你删除了一个元素之后数列a变成了:
[0, 1, 3, 4, 5, 6, 7, 8, 9],此时a的长度是9.
当i == 9 的时候,会用a[9]访问数据组,此时就会越界报错了。
数组是越来越短的,但是迭代的次数被固定下来了。