首页 > 解决方案 > 使用列表推导从 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]]

标签: pythonlistlist-comprehension

解决方案


我可能不会为此使用列表推导,但如果你想这样做:

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 用于非空列表。


推荐阅读