Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 27, 2013 18:13:02

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Убрать список в списке

Добрые люди, подскажите, как решить задачу.
Есть список.

[('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)

Офлайн

#2 Фев. 27, 2013 18:37:41

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Убрать список в списке

lst = [('Ranicki', '822938', 'Novi Pzar'), ('Ranicki', '822937', 'BK Rad Bgrd'), ('Ranicki Nis', '822938', 'Novi Pzar')]
#либо так.
lst.pop(0)
#либо так.
del lst[0]

Офлайн

#3 Фев. 27, 2013 18:40:51

Grisha
Зарегистрирован: 2013-02-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Убрать список в списке

Попробуйте так:
>>>spisok=

[('Ranicki','822938','Novi Pzar'),('Ranicki','822937','BK Rad Bgrd'),('Ranicki Nis','822938','Novi Pzar')]
>>>ptica=spisok.pop()
>>>spisok


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

Отредактировано Grisha (Фев. 27, 2013 18:42:20)

Офлайн

#4 Фев. 27, 2013 18:59:34

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Убрать список в списке

smoke853
Элимент на удаление может находиться в любом месте списка. И список может состоять из огромного числа элементов. Ваш способ не подходит.
Grisha
Попробуйте так:>>>spisok=
Как-то не удобно и с большим списком, по-моему вообще не тот результат выдаёт.

Офлайн

#5 Фев. 27, 2013 19:10:54

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Убрать список в списке

pop(i) удаляет элемент с индексом i и возвращает его. Если вызвать pop() без параметров, то будет возвращён и удалён последний элемент списка
Вообще не то.

Офлайн

#6 Фев. 27, 2013 20:18:22

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Убрать список в списке

Причина удаления списка? По какому критерию выполняется отбор для удаления?



Офлайн

#7 Фев. 27, 2013 20:33:22

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Убрать список в списке

4kpt
('Ranicki','822937','BK Rad Bgrd'),('Ranicki Nis','822938','Novi Pzar')]
Причина - ошибочный вариант.
Критерий отбора наличие переменных списка_ошибки в двух других.

Офлайн

#8 Фев. 27, 2013 21:30:31

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Убрать список в списке

Критерий не понятен. Берется первый список и сравнивается с остальными. Если в остальных есть такие же элементы или хотя-бы один такой элемент - то список удаляется. Я Вас правильно понял?



Офлайн

#9 Фев. 27, 2013 21:42:51

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Убрать список в списке

4kpt
Критерий не понятен. Берется первый список и сравнивается с остальными. Если в остальных есть такие же элементы или хотя-бы один такой элемент - то список удаляется. Я Вас правильно понял?
Я бы убрал, хотя бы один. Как видно минимально два.

Офлайн

#10 Фев. 27, 2013 21:48:32

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Убрать список в списке

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version