Split a list into half by even and odd indexes? [duplicate]

二次信任 提交于 2020-12-22 01:24:09

问题


Possible Duplicate:
Python program to split a list into two lists with alternating elements

I have a list like this:

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

The output I want is:

list = [3, 2, 1, fire]

So what I want is to make a list of even elements of the former list. I tried using a for statement and tried to delete 2nth element while appending them to the list, but it didn't work out:

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

print list2

Any suggestions?


回答1:


This should give you what you need - sampling a list at regular intervals from an offset 0 or 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']

Note that in the examples above, the first slice operation (a[1:]) demonstrates the selection of all elements from desired start index, whereas the second slice operation (a[::2]) demonstrates how to select every other item in the list.

A more idiomatic and efficient slice operation combines the two into one, namely a[::2] (0 can be omitted) and a[1::2], which avoids the unnecessary list copy and should be used in production code, as others have pointed out in the comments.




回答2:


You can use list slicing. The following snippet will do.

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

Output

[3, 2, 1, 'fire']
['blah', 'haha', 'pointer', 'poop']



回答3:


You can just slice the list: For odd : a[1::2] For even : a[::2]



来源:https://stackoverflow.com/questions/11702414/split-a-list-into-half-by-even-and-odd-indexes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!