关于网友提出的“python 数列问题?”问题疑问,本网通过在网上对“python 数列问题?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:python 数列问题?
描述:想去去除数列中的所有奇数项(数学中数列的索引从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:b=[i for i in a if a%2==0] #这样就得到过滤完毕的数列
当然楼上提到的
b=a[1::2]
更优雅
还有,尽量不要在循环迭代过程中去修改被迭代的数据。。不然会出现意想不到的错误
解决方案2:a = range(1, 10)
[a[i] for i, status in enumerate(map(lambda e : e % 2 == 0, a)) if status]
解决方案3:这。。。。时间复杂度是n^2啊...
解决方案4:第一你的程序逻辑有问题,判断应该为(a[i] + 1) % 2 == 0
第二你在一个长度固定不变的list上remove一个递增下标最后肯定会导致下标越界,因为remove同时list长度减一!
第三你可以使用 a = range(1, 11) 来代替 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
解决方案5:我记得有人告诉过我,对数组的操作,都要建立一个新的数组,送给题主
解决方案6:a[1::2]
解决方案7:不用这么麻烦。
a = [1,2,3,4,5,6,7,8,9,10]
a = a[1::2] # 1, 1 + 2, 1 + 4...
print a
解决方案8: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]访问数据组,此时就会越界报错了。
数组是越来越短的,但是迭代的次数被固定下来了。
以上介绍了“python 数列问题?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1456778.html