根据从另一个嵌套列表获取的值进行比较,从嵌套列表中删除项目。

3

我有两个嵌套列表,格式如下:


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变量没有正确地进行索引,我看到它从子列表a跳过数字。

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

1个回答

3
你可以像这样使用列表推导式:

你可以像这样使用列表推导式:

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

这将返回:

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

1
按预期工作。关于 Python 中的列表推导式,有一件事情:似乎总是不可能使用列表推导式来解决问题,直到完成它!@blhsing - Rohan R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接