Python:将不均匀的行转换为列

2024-06-16 13:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元素数量不均匀的列表:

[['a','b','c'], ['d','e'], [], ['f','g','h','i']]

我在Reportlab中显示了一个表,我想将它们显示为列。据我所知,RL只接受我上面的行形式的表(鸭嘴兽)的数据。在

我可以用一个循环来切换,但我觉得有一个列表理解会更快,更像Python。我也需要在元素用完的列中留出空白。在

所需产品为:

^{pr2}$

编辑:示例应该是字符串,而不是数字

谢谢你的帮助!在


Tags: 数据字符串元素编辑示例列表数量产品
3条回答

^{}接受一个fillvalue参数。在python3上,它是^{}。在

>>> l = [[1,2,3], [4,5], [], [6,7,8,9]]
>>> import itertools
>>> list(itertools.izip_longest(*l, fillvalue=""))
[(1, 4, '', 6), (2, 5, '', 7), (3, '', '', 8), ('', '', '', 9)]

如果您确实需要子列表而不是元组:

^{pr2}$

当然,对于字符串也有效:

>>> l = [['a','b','c'], ['d','e'], [], ['f','g','h','i']]
>>> import itertools
>>> list(itertools.izip_longest(*l, fillvalue=""))
[('a', 'd', '', 'f'), ('b', 'e', '', 'g'), ('c', '', '', 'h'), ('', '', '', 'i')]

它甚至是这样工作的:

>>> l = ["abc", "de", "", "fghi"]
>>> list(itertools.izip_longest(*l, fillvalue=""))
[('a', 'd', '', 'f'), ('b', 'e', '', 'g'), ('c', '', '', 'h'), ('', '', '', 'i')]

另一种方法是:

>>> map(lambda *z: map(lambda x: x and x or '', z), *l)
[['a', 'd', '', 'f'], ['b', 'e', '', 'g'], ['c', '', '', 'h'], ['', '', '', 'i']]
grid = [['a','b','c'], ['d','e'], [], ['f','g','h','i']]
i = 0
result = []
do_stop = False
while not do_stop:
    result.append([])
    count = 0
    for block in grid:
        try:
            result[i].append(block[i])
        except:
            result[i].append('')
            count = count +1
            continue
    if count ==len(grid):
        result.pop(i)
        do_stop = True
    i = i + 1

print result

相关问题 更多 >