У меня есть список
A = [['1'],['1','2'],['1','2','3','1','2'],['3','3','3']]
И я хочу сделать свой список
A = [['1'],['1','2'],['1','2','3'],['3']]
Т.е. я хочу удалить дубликаты элементов внутри элементов в списке ..
3 ответа
Однострочник (если порядок не имеет значения):
A = [['1'],['1','2'],['1','2','3','1','2'],['3','3','3']]
A = [list(set(a)) for a in A]
print(A) # => [['1'], ['2', '1'], ['3', '2', '1'], ['3']]
Однострочник (если заказ имеет значение):
A = [['1'],['1','2'],['1','2','3','1','2'],['3','3','3']]
A = [sorted(set(a), key=a.index) for a in A]
print(A) # => [['1'], ['1', '2'], ['1', '2', '3'], ['3']]
Функциональная версия с functools
:
>>> import functools
>>> A = [['1'],['1','2'],['1','2','3','1','2'],['3','3','3']]
>>> print ([functools.reduce(lambda result,x:result if x in result else result+[x], xs, []) for xs in A])
[['1'], ['1', '2'], ['1', '2', '3'], ['3']]
Лямбда-функция добавляет элемент в список result
, только если этот элемент отсутствует в списке. Не очень эффективно, но сохраняет порядок элементов.
Также обратите внимание, что в Python 2 вам не нужно импортировать functools
: reduce
является встроенной функцией.
Вы можете использовать генератор:
def remove_dups(l):
for a in l:
new_l = []
for b in a:
if b not in new_l:
new_l.append(b)
yield new_l
A = [['1'],['1','2'],['1','2','3','1','2'],['3','3','3']]
print(list(remove_dups(A)))
Выход:
[['1'], ['1', '2'], ['1', '2', '3'], ['3']]
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.