2013-08-02 4 views
4

Обычно я хотел бы использовать понимание, чтобы изменить список списков в списке. Тем не менее, я не хочу потерять пустые списки, поскольку я закрою окончательный список в другой список, и мне нужно будет поддерживать размещение.«Список списков» в «список» без потери пустых списков из исходного списка списков

У меня есть что-то вроде

list_of_lists = [['a'],['b'],[],['c'],[],[],['d']] и я использую этот

[x for sublist in list_of_lists for x in sublist] , который дает мне

['a','b','c','d'] но то, что я хотел бы это

['a','b','','c','','','d']

Извините, если это это глупый вопрос, я новичок в python.

Спасибо за помощь!

+2

Это не глупый вопрос: р – keyser

+2

Вы уверены, что '[[а], [б], [], [с], [], [ ], [d]] ', а не' [['a'], ['b'], [], ['c'], [], [], ['d']] ', что дает' [' а», 'б', 'с', 'd']'? – Hyperboreus

+0

Спасибо, ребята! Да, извините, это последнее, поправил теперь Hyperboreus. – user1792403

ответ

5

Вы начинаете с строк 'a', 'b' и т. Д.? Если это так, вы можете использовать ''.join для преобразования ['a'] в 'a' и [] в ''.

[''.join(l) for l in list_of_lists] 
+0

Собственно, для моих целей это еще лучше. @Rob напрямую ответил на мой вопрос, но этот метод (моя ошибка) не подходит для случая, когда у меня есть несколько строк в одном списке. Поскольку каждая строка станет отдельной строкой, тем самым увеличивая длину. Спасибо за отличный ответ! – user1792403

5

Просто выберите [''] вместо пустого списка, когда представлены пустой подсписка:

list_of_lists = [['a'],['b'], [], ['c'], [], [], ['d']] 
[x for sublist in list_of_lists for x in sublist or ['']] 

Если у вас есть какие-то более сложные критерии для лечения некоторых подсписки специально, вы можете использовать ... if ... else ...:

[x for sublist in list_of_lists for x in (sublist if len(sublist)%2==1 else [42])] 

Ps Я предполагаю, что отсутствие цитат в оригинале - это надзор.

+0

Это замечательное спасибо, и да, это был недосмотр - теперь исправлено – user1792403

1

Что-то вроде:

a = b = c = d = 3  
lol = [[a],[b],[],[c],[],[],[d]] 

from itertools import chain 
print list(chain.from_iterable(el or [[]] for el in lol)) 
# [3, 3, [], 3, [], [], 3] 
0
>>> result = [] 
>>> for l in list_of_lists: 
    if len(l) >0: 
     result += l 
    else: 
     result.append('') 


>>> result 
['a', 'b', '', 'c', '', '', 'd'] 
Смежные вопросы