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

A = [['1'],['1','2'],['1','2','3','1','2'],['3','3','3']]

И я хочу сделать свой список

A = [['1'],['1','2'],['1','2','3'],['3']]

Т.е. я хочу удалить дубликаты элементов внутри элементов в списке ..

1
Prayag Bhatia 26 Авг 2017 в 19:58

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']]
3
MrGeek 26 Авг 2017 в 19:12

Функциональная версия с 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 является встроенной функцией.

1
jferard 26 Авг 2017 в 17:28

Вы можете использовать генератор:

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']]
0
Ajax1234 26 Авг 2017 в 17:08