使用列表理解从二维列表创建二维列表
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], []]
所以我有一个二维列表,其中一些元素的长度为零,而其他元素则没有,我想通过创建长度大于 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], []]