通过偶数和奇数索引将列表分成两半? [复制]

Posted

技术标签:

【中文标题】通过偶数和奇数索引将列表分成两半? [复制]【英文标题】:Split a list into half by even and odd indexes? [duplicate] 【发布时间】:2012-07-26 23:51:59 【问题描述】:

可能重复:Python program to split a list into two lists with alternating elements

我有一个这样的列表:

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

有什么建议吗?

【问题讨论】:

这个问题(和它的答案)比它被标记为重复的问题更好也更通用。 第三个问题的这个答案是最好的:***.com/a/19153541/74291 【参考方案1】:

您可以使用列表切片。下面的 sn -p 就可以了。

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']

【讨论】:

【参考方案2】:

这应该可以满足您的需求 - 从偏移量 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],避免了不必要的列表复制,应该在生产代码中使用,就像其他人一样在 cmets 中指出。

【讨论】:

非常感谢 :) 我不知道这种东西存在!真的很有帮助 @H.Choi:这在每个教程的早期都有介绍,包括the official one。如果你不读的话,你会错过很多很酷的东西.. 为什么用[0:][::2][1:][::2] 而不是[::2][1::2]?这将不必要地复制列表。 -1 使用这种语法。这是不必要的和非意识形态的。使用惯用的 Python 切片 [::2] 表示偶数,使用 [1::2] 表示奇数。 我认为下面的答案更容易理解。在一个答案中结合两个概念让我很困惑。【参考方案3】:

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

【讨论】:

以上是关于通过偶数和奇数索引将列表分成两半? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer——13. 调整数组顺序使奇数位于偶数前面

如何一次处理列表的所有项目? [复制]

vb实验 随机数中求奇偶数和素数并进行排序

程序将数组分成N个连续子数组,使每个子数组的和为奇数

python如何得到1~20的奇数列表与偶数列表

c_cpp 甚至索引处的偶数和奇数索引处的奇数