python - 如何填写“锯齿状”列表?
问题描述
我有以下“锯齿状”python 列表:
lst = [[1, 'a', 2], ['b', 'c', 'd', 3, 4, 5], ['e']]
我想用 0 填充此列表中的“缺失”值,以便结果是矩形数组:
[[1, 'a', 2, 0, 0, 0],
['b', 'c', 'd', 3, 4, 5],
['e', 0, 0, 0, 0, 0]]
做这个的最好方式是什么?
解决方案
使用itertools.zip_longest
,然后重新压缩结果
>>> lst = [[1, 'a', 2], ['b', 'c', 'd', 3, 4, 5], ['e']]
>>> from itertools import zip_longest
>>> [list(x) for x in zip(*zip_longest(*lst, fillvalue=0))]
[[1, 'a', 2, 0, 0, 0], ['b', 'c', 'd', 3, 4, 5], ['e', 0, 0, 0, 0, 0]]
zip(*t)
是转置列表列表的著名习语;同样的技巧适用于zip_longest
. 由于转置的转置是原始列表,因此这会将每个子列表填充到所需的长度。
更详细地说,
>>> list(zip_longest(*lst, fillvalue=0))
[(1, 'b', 'e'), ('a', 'c', 0), (2, 'd', 0), (0, 3, 0), (0, 4, 0), (0, 5, 0)]
在这里你可以看到第一个元素的元组,然后是第二个元素的元组,等等。当给定的子列表0
中没有第一个元素时使用。i
推荐阅读
- azure - Azure Sentinel 和第 3 部分 API 集成
- react-native - bottomTabNavigator 中的导航道具问题
- python-3.x - 如何用列表中的“无”替换不存在的元素[PYTHON]
- linkedin - 是否可以将 AutoFill Linkedin 集成到 elementor 表单中?
- ios - SocketRocket IOS Swift 无法重新打开它正在崩溃的套接字
- android-recyclerview - 水平 recyclerView 中的项目比垂直 recyclerView 显示不正确
- python - 给定一个句子,返回一个单词颠倒的句子
- java - 如何轻松地从 Intellij 制作 jar 文件并正确运行?
- python - 尝试使用 BeautifulSoup 写入时出现文件模式错误
- amazon-web-services - 无法连接到 Amazon EC2 实例上的自定义端口