如何使用不相等的子列表在python中进行列表理解

Jad*_*dox 9 python

我有一份不平等的名单.我想从子列表中生成一个包含列表推导的新列表.

s = [['a','b','c','d'],['e','f','g'],['h','i'],['j','k','l','m']]
Run Code Online (Sandbox Code Playgroud)

我正在尝试以下代码,但它不断引发indexError:

new_s = []
for i in range(len(s)):
    new_s.append((i,[t[i] for t in s if t[i]))
Run Code Online (Sandbox Code Playgroud)

预期的产出是:

new_s = [(0,['a','e','h','j']),(1,['b','f','i','k']),(2,['c','g','l']),(3,['d','m'])]
Run Code Online (Sandbox Code Playgroud)

任何想法如何让这个工作?

Cor*_*mer 12

您可以使用itertools.zip_longest迭代遍历每个子列表元素,同时使用None较短子列表的填充值.

然后使用filter删除None填充中使用的值.

所以一起列表理解:

>>> from itertools import zip_longest
>>> [(i, list(filter(None, j))) for i, j in enumerate(zip_longest(*s))]
[(0, ['a', 'e', 'h', 'j']), (1, ['b', 'f', 'i', 'k']), (2, ['c', 'g', 'l']), (3, ['d', 'm'])]
Run Code Online (Sandbox Code Playgroud)