Форум сайта python.su
1
Добрые люди, подскажите, как решить задачу.
Есть список.
[('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')]
Отредактировано paraman (Фев. 27, 2013 18:13:25)
Офлайн
15
lst = [('Ranicki', '822938', 'Novi Pzar'), ('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')] #либо так. lst.pop(0) #либо так. del lst[0]
Офлайн
0
Попробуйте так:
>>>spisok=
[('Ranicki','822938','Novi Pzar'),('Ranicki','822937','BK Rad Bgrd'),('Ranicki Nis','822938','Novi Pzar')]
Отредактировано Grisha (Фев. 27, 2013 18:42:20)
Офлайн
1
smoke853Элимент на удаление может находиться в любом месте списка. И список может состоять из огромного числа элементов. Ваш способ не подходит.
GrishaКак-то не удобно и с большим списком, по-моему вообще не тот результат выдаёт.
Попробуйте так:>>>spisok=
Офлайн
1
pop(i) удаляет элемент с индексом i и возвращает его. Если вызвать pop() без параметров, то будет возвращён и удалён последний элемент списка
Вообще не то.
Офлайн
63
Причина удаления списка? По какому критерию выполняется отбор для удаления?
Офлайн
1
4kptПричина - ошибочный вариант.
('Ranicki','822937','BK Rad Bgrd'),('Ranicki Nis','822938','Novi Pzar')]
Офлайн
63
Критерий не понятен. Берется первый список и сравнивается с остальными. Если в остальных есть такие же элементы или хотя-бы один такой элемент - то список удаляется. Я Вас правильно понял?
Офлайн
1
4kptЯ бы убрал, хотя бы один. Как видно минимально два.
Критерий не понятен. Берется первый список и сравнивается с остальными. Если в остальных есть такие же элементы или хотя-бы один такой элемент - то список удаляется. Я Вас правильно понял?
Офлайн
43
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
Отредактировано sergeek (Фев. 27, 2013 22:00:45)
Офлайн