如何删除列表中的所有奇数序项?

Mar*_*rio 1 python list

我搜索了stackoverflow,看到有人写这个:

[item for item in yourlist if item % 2]
Run Code Online (Sandbox Code Playgroud)

它对我不起作用.

我的代码是这样的:

x = ['apple','fruit','orange','fruit','lemon','fruit']
for i in range(0,len(x),2):
    if i%2 !=0:
        x.pop(i)
print x
Run Code Online (Sandbox Code Playgroud)

这也行不通.它说流行指数超出范围

怎么做?

Mar*_*ers 8

使用步幅切片:

x = x[1::2]
Run Code Online (Sandbox Code Playgroud)

或者选择奇数项而不是偶数项:

x = x[::2]
Run Code Online (Sandbox Code Playgroud)

第一个从第二个项开始,从输入列表中获取每秒元素.另一个从第一个项目开始从列表中获取每个第二个元素.

演示:

>>> x = ['apple', 'fruit', 'orange', 'fruit', 'lemon', 'fruit']
>>> x[1::2]
['fruit', 'fruit', 'fruit']
>>> x[::2]
['apple', 'orange', 'lemon']
Run Code Online (Sandbox Code Playgroud)

原始代码仅在想要选择偶数值时才有效,而不是偶数索引.您可以使用该enumerate()函数向该循环添加索引:

>>> [f for i, f in enumerate(x) if i % 2]
['fruit', 'fruit', 'fruit']
Run Code Online (Sandbox Code Playgroud)

但切片在这里更容易.