Разделить список пополам четными и нечетными элементами? - программирование
Подтвердить что ты не робот

Разделить список пополам четными и нечетными элементами?

Возможный дубликат:
Программа 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

Любые предложения?

4b9b3361

Ответ 1

Это должно дать вам то, что вам нужно - выборка списка через регулярные интервалы со смещения 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], что позволяет избежать ненужной копии списка и должно использоваться в производственном коде, так как другие отметили в комментариях.

Ответ 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']

Ответ 3

Вы можете просто нарезать список: Для нечетных: a[1::2] Для четного: a[::2]