首页 > 解决方案 > 基于比较从另一个嵌套列表中获得的值从嵌套列表中删除项目

问题描述

我在表单中有两个嵌套列表:


a = [[1,2,3,4,5],[3,4,5,6,7,8,9],[5],[1,2,3,6,7,8,9]]
b = [[1,4],[6,9]]

我想要一个函数来获取这两个列表,使用列表的每个子列表中的值b并使用它来删除列表a中的值,以便输出如下所示:

[[5],[5],[5],[]]

即函数应该迭代列表中的所有值a并删除这样的值1 <= value <= 46 <= value <= 9

目前我有这个:

def remove_unnecessary_peaks(peaks_total,peaks_to_be_excluded):
    redacted_peak_list = peaks_total.copy()
    i=0
    for  item in peaks_total:
        for value_set in peaks_to_be_excluded:
            for peak in item:
                #print (value_set[0],peak,value_set[1])
                if value_set[0]<=peak<=value_set[1]:
                    redacted_peak_list[i].remove(peak)
        i=i+1          

    return (redacted_peak_list)                

a = [[1,2,3,4,5],[3,4,5,6,7,8,9],[5],[1,2,3,6,7,8,9]]
b = [[1,4],[6,9]]

print(remove_unnecessary_peaks(a,b))

我这样做了数据的副本,redacted_peak_list = peaks_total.copy()这样我就不会修改peaks_total变量,因为它会搞砸索引。在 Spyder 的调试模式下,我看到变量peak没有被正确索引,我看到它从 sublist 中跳过了数字a

我的输出是[[2, 4, 5], [4, 5, 7, 9], [5], [2, 7, 9]]我想要的[[5],[5],[5],[]]

标签: python-3.xnested-lists

解决方案


您可以使用这样的列表推导:

[[i for i in s if not any(l <= i <= h for l, h in b)] for s in a]

这将返回:

[[5], [5], [5], []]

推荐阅读