2016-09-23 3 views
1
list = [('a5', 1), 1, ('a1', 1), 0, 0] 

Я хочу сгруппировать элементы списка в 3, если отсутствует второй или третий элемент в списке «Нет» для добавления в соответствующее место.Элементы списка группировки в python

exepected_output = [[('a5', 1), 1,None],[('a1', 1), 0, 0]] 

Существует ли для этого путинский способ? Новым для этого были бы любые предложения.

+5

Как вы узнаете, отсутствует ли 2-й или 3-й элемент? – depperm

+0

Вот как вы разделили [список на куски] (http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks) –

+0

В качестве полезного в стороне - где вы получаете эти данные * от *? Очень вероятно, что есть лучший способ получить ваши данные из своего родного состояния в состояние, которое вы ищете. –

ответ

1

Насколько я знаю, единственный способ получить результат, который вы хотите, - это прокрутить список и определить, когда вы встречаете кортежи.

Пример, который должен работать:

temp = None 
result = [] 
for item in this_list: 
    if type(item) == tuple: 
     if temp is not None: 
      while len(temp) < 3: 
       temp.append(None) 
      result.append(temp) 
     temp = [] 
    temp.append(item) 

Edit: Как кто-то правильно заметил, не называйте список переменных, вы бы перезаписать встроенную функцию списка. Изменено имя в примере.

+1

Последняя температура никогда не добавляется к результату. В редком случае, когда OP фактически дает вам хороший тестовый пример, используйте его! Предпочтительно, прежде чем отправлять ответ. :) expected_output = [[('a5', 1), 1, None], [('a1', 1), 0, 0]] assert (result == expected_output) –

2

Вот несколько другой подход от других ответов, проводя сравнение по типу каждого элемента, а затем разбивая исходный список на куски.

li = [('a5', 1), 1, ('a1', 1), 0, 0] 

for i in range(0, len(li), 3): 
    if type(li[i]) is not tuple: 
     li.insert(i, None) 
    if type(li[i+1]) is not int: 
     li.insert(i+1, None) 
    if type(li[i+2]) is not int: 
     li.insert(i+2, None) 

print [li[i:i + 3] for i in range(0, len(li), 3)] 
Смежные вопросы