python - 使用列表推导从 2D 列表创建 2D 列表
问题描述
所以我有一个 2D 列表,其中一些元素的长度为零,而另一些则不是,我想通过创建长度大于 2 的元素对来创建一个 2D 列表,但保留长度为零的元素,这是一个例子,我试过:
mylist = [[], [3, 2, 4], [], [], [3, 2, 4], []] #2D list
newlist = [x[idx: idx+2] if len(x) >= 2 else [] for x in mylist for idx in range(0, len(x) - 1) ] #This tries to create the 3D list
print(newlist)
#newlist = [[3, 2], [2, 4], [3, 2], [2, 4]] #doesn't have the list with lenght zero
我想要的结果应该是这样的
newlist = [[], [3, 2], [2, 4], [], [], [3, 2], [2, 4], []]
我的初始列表可能不同,另一个有效的例子是:
mylist = [[1, 2], [3, 2, 4], [3, 4], [3, 2, 4], [1, 2, 3, 4]]
我已经尝试更改 if else 条件,但似乎没有任何效果,所以任何帮助将不胜感激,谢谢!
编辑:列表可能不同,它可能包含长度为零或不为零的元素,通过创建对我的意思是,如果我有类似的列表:
l1 = [2, 3, 4] it will create the pairs [[2,3], [3, 4]]
l2 = [2, 3, 4, 5] it will create the pairs [[2, 3], [3, 4], [4, 5]]
解决方案
我可能不会为此使用列表推导,但如果你想这样做:
mylist = [[], [3, 2, 4], [], [], [3, 2, 4], []]
newlist = [k[j:j+2] if len(k)>0 else [] for k in mylist for j in range(max(1,len(k)-1))]
输出:
[[], [3, 2], [2, 4], [], [], [3, 2], [2, 4], []]
max(1,len(k)-1) 确保我们有 1 j 值用于空列表和 len(k)-1 用于非空列表。
推荐阅读
- android - Android Studio - 设计视图中的视图变为灰色
- javascript - 在 React 中使用请求动画帧
- wget - 使用 --mirror 和 --input-file 使用 wget 创建 warc
- apache-flink - Python UDF 引发 py4j 异常的 Pyflink 设置有什么问题?
- python - 对于带有字符串python的列表循环
- python - 无法在 python 中安装 seaborn 库:Spyder
- node.js - node-expat 安装问题
- javascript-objects - 运行我的代码时,我收到此“未捕获的类型错误:无法在'URL'上执行'createObjectURL':重载解析失败。在handleVideo”
- reactjs - MapStateToProps 在组件内部不起作用,但 Redux Devtools 显示数据
- apache - Apache 向请求 URI 添加了实际上不存在的字符,从而导致错误的重写规则