使用列表理解从二维列表创建二维列表

Creating a 2D list from a 2D list using list comprehension

所以我有一个二维列表,其中一些元素的长度为零,而其他元素则没有,我想通过创建长度大于 2 的元素对来创建一个二维列表,但保留那些长度为零的元素,这里是一个例子和我的尝试:

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 个值。

在继续之前,您基本上需要检查 val 的长度。

mylist = [[], [3, 2, 4], [], [], [3, 2, 4], []] #2D list


nex_list=[]
for val in mylist:
    if len(val)>=2: #=== len of val
        for idx in range(0, len(val)-1):
            nex_list.append(val[idx: idx+2])
    else:
        nex_list.append([]) #=== Add empty list to new list
print(nex_list)

输出

[[], [3, 2], [2, 4], [], [], [3, 2], [2, 4], []]