Удалить элементы из вложенного списка на основе сравнения значений, полученных из другого вложенного списка - PullRequest
0 голосов
/ 17 октября 2018

У меня есть два вложенных списка в форме:


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 <= 4 и 6 <= 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 Ответ

0 голосов
/ 17 октября 2018

Вы можете использовать понимание списка следующим образом:

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

Возвращает:

[[5], [5], [5], []]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...