删除所有奇数顺序表c语言,如何删除列表中的所有奇数序数项?

本文详细解析了一个常见的编程错误,即尝试在迭代过程中修改列表,导致`popindexoutofrange`异常。解释了错误的原因,并提供了两种解决方案:使用切片表示法或列表推导式来正确过滤列表元素。同时,强调了在迭代列表时要注意的副作用问题。
摘要由CSDN通过智能技术生成

您的代码失败了,因为您试图修改正在迭代的列表,而不考虑副作用。你知道吗x = ['apple','fruit','orange','fruit','lemon','fruit']

for i in range(0,len(x),2):

if i%2 !=0:

x.pop(i)

print x

注1:range(0,len(x),2)将产生[0, 2, 4],并且没有一个会在条件下成功。所以,我假设你的意思是range(1,len(x),2)

注2:由于您在range(1,len(x),2)上迭代,实际上是[1, 3, 5],if条件已过时。你知道吗

当i为1时,我们将元素弹出为1。所以实际发生的是

在1处弹出元素之前x = ['apple','fruit','orange','fruit','lemon','fruit']

0 1 2 3 4 5

在1处弹出元素后x = ['apple','orange','fruit','lemon','fruit']

0 1 2 3 4

同样,当i变为3时,我们将元素放在3处

在3处弹出元素之前x = ['apple','orange','fruit','lemon','fruit']

0 1 2 3 4

在3处弹出元素后x = ['apple','orange','fruit','fruit']

0 1 2 3

现在,i变为5,位置5处没有元素。这就是x.pop(5)引发pop index out of range

错误。你可以用这个程序来确认x = ['apple','fruit','orange','fruit','lemon','fruit']

try:

for i in range(1,len(x),2):

if i%2 !=0:

x.pop(i)

except IndexError, e:

print e, x, i

输出是这样的pop index out of range ['apple', 'orange', 'fruit', 'fruit'] 5

解决方案

您可以使用切片表示法来仅获取偶数顺序数据中的元素,如下所示print x[::2] # ['apple', 'orange', 'lemon']

你可以得到奇数的元素,像这样print x[1::2] # ['fruit', 'fruit', 'fruit']

否则,您可以使用列表理解来过滤出奇数顺序数据,如下所示x = ['apple','fruit','orange','fruit','lemon','fruit']

print [item for idx, item in enumerate(x) if idx % 2 == 0]

# ['apple', 'orange', 'lemon']

print [item for idx, item in enumerate(x) if idx % 2 == 1]

# ['fruit', 'fruit', 'fruit']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值