5

通常我会使用理解将我的列表列表更改为列表。但是,我不想丢失空列表,因为我会将最终列表压缩到另一个列表,并且我需要维护排名。

我有类似的东西

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 新手。

谢谢你的帮助!

4

4 回答 4

5

您是从字符串 , 等开始的'a''b'?如果是这样,那么您可以使用''.jointo 转换['a']'a'[]into ''

[''.join(l) for l in list_of_lists]
于 2013-08-02T16:55:17.277 回答
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 我假设原文中缺少引号是疏忽。

于 2013-08-02T16:56:24.827 回答
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]
于 2013-08-02T16:59:13.010 回答
0
>>> result = []
>>> for l in list_of_lists:
    if len(l) >0:
        result += l
    else:
        result.append('')


>>> result
['a', 'b', '', 'c', '', '', 'd']
于 2013-08-02T17:04:29.317 回答