【问题标题】:Remove nested lists from a list if nested list contains a certain value如果嵌套列表包含某个值,则从列表中删除嵌套列表
【发布时间】:2020-04-27 03:34:49
【问题描述】:

我有一个嵌套列表,我想删除空列表 [] 以及其中包含 -1 值的任何嵌套列表。这是我到目前为止所拥有的,它工作得更早,但我认为 jupyter 有问题。

regions = [[], [2, -1, 1], [4, -1, 1, 3], [5, 0, -1, 4], [9, 10, 7, 8], 
                    [7, 6, 10], [8, 0, 5, 6, 7], [9, 2, 1, 3, 10], 
                    [9, 2, -1, 0, 8], [10, 3, 4, 5, 6]]

counter = range(len(regions))
for region in counter:
    print(region)
    for i in range(len(regions[region])): # IndexError: list index out of range
    #print(regions[region])
        if regions[region][i] == -1:
            regions.remove(regions[region])
            break
print(regions)

我认为问题在于当我从区域列表中删除一个区域时,区域嵌套列表的计数器被修改,这使我在完成对每个嵌套列表的迭代之前用完了索引值。

我的方法是否有意义,或者是否有我忽略的更原生的解决方案(例如某种列表理解、lambda、过滤器等)?

【问题讨论】:

    标签: python nested-lists


    【解决方案1】:

    您可以简单地使用这个列表推导:

    regions = [i for i in regions if i and (-1 not in i)]
    

    输出:

    [[9, 10, 7, 8], [7, 6, 10], [8, 0, 5, 6, 7], [9, 2, 1, 3, 10], [10, 3, 4, 5, 6]]
    

    【讨论】:

      【解决方案2】:

      你也可以使用:

      regions = list(filter(lambda r: r and (r.count(-1)==0),regions))
      

      【讨论】:

        猜你喜欢
        • 2020-11-20
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多