Удалить вложенные списки из списка, если вложенный список содержит определенное значение - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть вложенный список, и я хотел бы удалить пустой список [] и любой вложенный список со значением -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)

Думаю, проблема в том, что когда я удаляю регион из списка регионов, счетчик для вложенного списка регионов изменяется, и это заставляет меня исчерпать значения индекса, прежде чем я завершу sh итерацию через каждый вложенный список.

Также имеет ли смысл мой подход или есть более нативное решение, которое я пропускаю (например, какое-то понимание списка, лямбда, фильтр и т. д. c)?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

Вы можете просто использовать это понимание списка:

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]]
1 голос
/ 26 апреля 2020

Вы также можете использовать:

regions = list(filter(lambda r: r and (r.count(-1)==0),regions))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...