28

可能重复:
Python 程序将列表拆分为两个具有交替元素的列表

我有一个这样的列表:

list1 = [blah, 3, haha, 2, pointer, 1, poop, fire]

我想要的输出是:

list = [3, 2, 1, fire]

所以我想要的是列出前一个列表的偶数元素。我尝试使用for语句并尝试删除第 2 个元素,同时将它们附加到列表中,但没有成功:

count = 0
for a in list1:
 list2.append(a)
 if count % 2 = = 1:
  list2.pop(count)

print list2

有什么建议么?

4

3 回答 3

55

您可以使用列表切片。下面的代码片段就可以了。

list1 = ['blah', 3, 'haha', 2, 'pointer', 1, 'poop', 'fire']
listOdd = list1[1::2] # Elements from list1 starting from 1 iterating by 2
listEven = list1[::2] # Elements from list1 starting from 0 iterating by 2
print listOdd
print listEven

输出

[3, 2, 1, 'fire']
['blah', 'haha', 'pointer', 'poop']
于 2012-07-28T15:48:42.603 回答
45

这应该可以满足您的需要 - 从偏移量 0 或 1 定期对列表进行采样:

>>> a = ['blah', 3,'haha', 2, 'pointer', 1, 'poop', 'fire']
>>> a[0:][::2] # even
['blah', 'haha', 'pointer', 'poop']
>>> a[1:][::2] # odd
[3, 2, 1, 'fire']

请注意,在上面的示例中,第一个切片操作 ( a[1:]) 演示了从所需的起始索引中选择所有元素,而第二个切片操作 ( a[::2]) 演示了如何选择列表中的每个其他项目。

更惯用和更有效的切片操作将两者合二为一,即a[::2](0可以省略) 和a[1::2],它避免了不必要的列表复制,应该在生产代码中使用,正如其他人在评论中指出的那样。

于 2012-07-28T15:47:28.737 回答
3

您可以只对列表进行切片:对于奇数:a[1::2] 对于偶数:a[::2]

于 2012-07-28T15:51:02.897 回答