我有一份不平等的名单.我想从子列表中生成一个包含列表推导的新列表.
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)
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |