Найти - Пользователи
Полная версия: Убрать список в списке
Начало » Python для новичков » Убрать список в списке
1 2
paraman
Добрые люди, подскажите, как решить задачу.
Есть список.
[('Ranicki', '822938', 'Novi Pzar'), ('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')]
Как из него убрать?
('Ranicki', '822938', 'Novi Pzar')
В данной списке есть совпадения с другими списками. Остальные уникальны.
В итоге хотелось бы получить
[('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')]
smoke853
lst = [('Ranicki', '822938', 'Novi Pzar'), ('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')]
#либо так.
lst.pop(0)
#либо так.
del lst[0]
Grisha
Попробуйте так:
>>>spisok=
[('Ranicki','822938','Novi Pzar'),('Ranicki','822937','BK Rad Bgrd'),('Ranicki Nis','822938','Novi Pzar')]
>>>ptica=spisok.pop()
>>>spisok


А если изначально ставить вместо квадратных круглые скобки ,то будет множество которое вам само подскажет где повторение.
paraman
smoke853
Элимент на удаление может находиться в любом месте списка. И список может состоять из огромного числа элементов. Ваш способ не подходит.
Grisha
Попробуйте так:>>>spisok=
Как-то не удобно и с большим списком, по-моему вообще не тот результат выдаёт.
paraman
pop(i) удаляет элемент с индексом i и возвращает его. Если вызвать pop() без параметров, то будет возвращён и удалён последний элемент списка
Вообще не то.
4kpt
Причина удаления списка? По какому критерию выполняется отбор для удаления?
paraman
4kpt
('Ranicki','822937','BK Rad Bgrd'),('Ranicki Nis','822938','Novi Pzar')]
Причина - ошибочный вариант.
Критерий отбора наличие переменных списка_ошибки в двух других.
4kpt
Критерий не понятен. Берется первый список и сравнивается с остальными. Если в остальных есть такие же элементы или хотя-бы один такой элемент - то список удаляется. Я Вас правильно понял?
paraman
4kpt
Критерий не понятен. Берется первый список и сравнивается с остальными. Если в остальных есть такие же элементы или хотя-бы один такой элемент - то список удаляется. Я Вас правильно понял?
Я бы убрал, хотя бы один. Как видно минимально два.
sergeek
from itertools import chain
lst = [('Ranicki', '822938', 'Novi Pzar'), ('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')]
 def bad(sub, idx):
    other = tuple(chain.from_iterable(lst[:idx]+lst[idx+1:]))
    return all(v in other for v in sub)
[sub for idx, sub in enumerate(lst) if not bad(sub,idx)]
Out[4]: [('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')]

или если сравнивать с числом

 def bad(sub, idx):
    other = tuple(chain.from_iterable(lst[:idx]+lst[idx+1:]))
    return sum(v in other for v in sub) > 1
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB