【问题标题】:Creating a 2D list from a 2D list using list comprehension使用列表推导从 2D 列表创建 2D 列表
【发布时间】:2021-06-02 03:14:40
【问题描述】:

所以我有一个 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]]

【问题讨论】:

  • for idx in range(0, len(x) - 1) 将创建一个空的range 每当len(x) <= 1 所以x 不会发生任何事情。
  • 你想要的结果仍然有些模糊,我想如果你详细说明一下(列表总是大小为03?创建对到底是什么意思?
  • 嗨,谢谢你的评论,我编辑了这个问题,也许它更清楚一点。

标签: python list list-comprehension


【解决方案1】:

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

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。

【讨论】:

    【解决方案2】:

    你在继续之前基本上需要检查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], []]
    

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2021-05-01
      • 2020-04-30
      相关资源
      最近更新 更多