Python列表转置和填充

标签 python list fill transpose

我有一个列表列表,每个内部列表的长度要么是 1 要么是 n(假设 n > 1)。

>>> uneven = [[1], [47, 17, 2, 3], [3], [12, 5, 75, 33]]

我想转置列表,而不是截断较长的列表(如 zip)或用 None 填充较短的列表,我想填充较短的列表列出了自己的奇异值。换句话说,我想得到:

>>> [(1, 47, 3, 12), (1, 17, 3, 5), (1, 2, 3, 75), (1, 3, 3, 33)]

我可以通过几次迭代来做到这一点:

>>> maxlist = len(max(*uneven, key=len))
>>> maxlist
4
>>> from itertools import repeat
>>> uneven2 = [x if len(x) == maxlist else repeat(x[0], maxlist) for x in uneven]
>>> uneven2
[[1, 1, 1, 1], [47, 17, 2, 3], [3, 3, 3, 3], [12, 5, 75, 33]]
>>> zip(*uneven2)
[(1, 47, 3, 12), (1, 17, 3, 5), (1, 2, 3, 75), (1, 3, 3, 33)]

但是有更好的方法吗?我真的需要提前知道 maxlist 才能完成此任务吗?

最佳答案

你可以永远重复一个元素列表:

uneven = [[1], [47, 17, 2, 3], [3], [12, 5, 75, 33]]

from itertools import repeat

print zip(*(repeat(*x) if len(x)==1 else x for x in uneven))

关于Python列表转置和填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610445/

相关文章:

css - 单击 HTML 页面上的按钮后渐变填充 SVG

python - Python Azure IoTHub SDK 文档

python - "ValueError: too many values to unpack"《艰难地学习 Python》,Ex 13

php - 使用 MySQL 直接从列的数据中获取列表

python - 将两个列表的项目合并到也包含索引的元组列表中

css - 让 2 个 div 填充页面的其余部分

python - 从最后一行读取csv文件

python - Pandas:基于标题子字符串的部分枢轴

javascript - Object.list = {} 和 list = {} 有区别吗?

javascript - casperjs的测试属性