Python 用偶数和奇数索引将列表一分为二?
可能重复:Python 用偶数和奇数索引将列表一分为二?,python,list,split,Python,List,Split,可能重复: 我有这样一份清单: 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) p
我有这样一份清单:
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
有什么建议吗?这会给你你所需要的-从偏移量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://code>)演示了从所需的开始索引中选择所有元素,而第二个切片操作(a[::2]
)演示了如何选择列表中的其他每一项
一种更为惯用和高效的切片操作将这两种操作结合在一起,即A[::2]
(0
可以省略)和A[1::2]
,这避免了不必要的列表副本,应该在生产代码中使用,正如其他人在注释中指出的那样。您可以使用列表切片。下面的代码片段就可以了
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']
您只需对列表进行切片即可:
对于奇数:a[1::2]
甚至:a[::2]
非常感谢:)我不知道这种事情存在!真的吗helped@H.Choi:每个教程都很早就介绍了这一点,包括。如果你不读的话,你会错过很多很酷的东西。为什么[0::[::2]
和[1:[::2]
而不是[::2]
和[1::2]
?这将不必要地复制列表。-1使用此语法。这是不必要的,也是非意识形态的。用惯用的Python切片[::2]
表示偶数,用[1::2]
表示奇数。我认为下面的答案更容易理解。将两个概念结合在一个答案中让我感到困惑。这个问题(及其答案)比标记为重复的问题更好、更一般。第三个问题的这个答案是最好的: