通过偶数和奇数索引将列表分成两半? [复制]
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]
【讨论】:
以上是关于通过偶数和奇数索引将列表分成两半? [复制]的主要内容,如果未能解决你的问题,请参考以下文章