Удалить список из списка списков Python - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть список списков:

[[0.0,3.3, 4.9, 7.5], [4, 6, 90, 21, 21.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000]]

Я хочу удалить подсписок из списка, если этот подсписок содержит элемент вне заданного диапазона.

Например;range = 3, 15

Итак, если подсписок содержит, -69, -17, 0, 1, 2, 15.1, 246.99, т.е. любой элемент, который находится за пределами этого диапазона, я хочу удалить этот подсписок.

Вывод, который должен быть возвращен, представляет собой список списков, в котором все подсписки содержат только значения в этом диапазоне:

[[6, 5, 7, 13, 12], [4, 6, 10], [9, 9, 4, 5, 11], [4, 4]]

Мне известно, что здесь есть похожие вопросы, такие как:

Удаление подсписков из списка списков

Python - Удаление списков (списков) из списка списков (аналогично .pop ())

Я не могу заставить эти решения работать.

Моя цель - не удалять дубликаты списков: по этому поводу много вопросов, но это не моя цель.

Мой код:

max_value = 15
min_value = 3

for sublist in my_list:
  for item in sublist:
    if(item < min_value):
        my_list.pop(sublist)
    if(item > max_value):
        my_list.pop(sublist)
print(my_list)

Ошибка:

TypeError: 'list' object cannot be interpreted as an integer

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

список понимания

new_list = [sublist for sublist in list if not any(el in range(a, b) for el in sublist)]
0 голосов
/ 01 февраля 2019

Вы можете использовать понимание списка.Вот пример ввода и вывода.Идея проста: для каждого подсписка просто проверьте значения min и max, если они выходят за пределы желаемых пределов.

list_1 = [[0.0,3.3, 4.9, 7.5], [4, 6, 9, 11, 12.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000], ]

left = 3
right = 15

list_2 = [i for i in list_1 if (min(i)>=left and max(i)<=right)]
print (list_2)
# [[4, 6, 9, 11, 12.1]]
0 голосов
/ 01 февраля 2019

Ваша ошибка связана с использованием метода .pop(), который ожидает целочисленный индекс в качестве аргумента, когда вы действительно имеете в виду .remove().Однако даже после исправления этого значения до .remove() могут также возникать ошибки при попытке удалить элементы из списка во время итерации по нему.Более чистый подход - это понимание списка:

my_list = [[0.0,3.3, 4.9, 7.5], [4, 6, 90, 21, 21.1], [3, 43, 99, 909, 2.11, 76, 76.9, 1000]]
min_value = 3
max_value = 100

my_list[:] = [sublist for sublist in my_list if all(min_value <= x <= max_value for x in sublist)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...