удалить дубликаты из многомерного списка (python) - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь удалить дублирующиеся элементы из многомерного списка. Моя цель состоит в том, чтобы удалить одинаковые элементы в списках.

Например: список 2, список 6 и список 7 содержат автомобиль Bentley. Я хочу удалить эту машину из 2 списков.

Как мне это сделать?

Приведенный ниже код работает, только если я передаю один список, содержащий повторяющиеся записи, но мне нужно дедуплицировать многомерный список.

cars = [
     ["Acura", "Alfa Romeo", "Aston Martin", "Audi", "Aston Martin"],
     ["Bentley", "BMW", "Bugatti", "Buick"],
     ["Cadillac", "Chrysler", "Citroen"],
     ["Dodge", "Ferrari", "Fiat", "Ford"],
     ["Geely", "Honda", "Hyundai", "Infiniti"],
     ["Alfa Romeo", "Bentley", "Hyundai", "Lamborghini"],
     ["Koenigsegg", "Bentley", "Maserati", "Lamborghini"]
    ]

def remove(duplicate):
  final_list = []
  for num in duplicate:
    if num not in final_list:
        final_list.append(num)
  return final_list


print (remove(cars))

returns:
[
 ['Acura', 'Alfa Romeo', 'Aston Martin', 'Audi','Aston Martin']
 ['Bentley', 'BMW', 'Bugatti', 'Buick'], 
 ['Cadillac', 'Chrysler', 'Citroen'], 
 ['Dodge', 'Ferrari', 'Fiat', 'Ford'], 
 ['Geely', 'Honda', 'Hyundai', 'Infiniti'], 
 ['Alfa Romeo', 'Bentley', 'Hyundai', 'Lamborghini'
 ['Koenigsegg', 'Bentley', 'Maserati', 'Lamborghini']
]

Мой желаемый результат после дедупликации показан ниже. Ни один список в этом многомерном списке не содержит повторяющихся записей.

 [
  ['Acura', 'Alfa Romeo', 'Aston Martin', 'Audi']
  ['Bentley', 'BMW', 'Bugatti', 'Buick'], 
  ['Cadillac', 'Chrysler', 'Citroen'], 
  ['Dodge', 'Ferrari', 'Fiat', 'Ford'], 
  ['Geely', 'Honda', 'Hyundai', 'Infiniti'], 
  ['Bentley', 'Hyundai', 'Lamborghini'
  ['Koenigsegg', 'Maserati']
 ]

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы можете использовать памятка с этой целью. Сохраните первое вхождение каждого элемента в списке скажем, списке F . Если элемент не в F, то он уникален . Сохраните уникальный элемент в F и повторите процедуру.

0 голосов
/ 27 августа 2018

Вы можете сделать это так:

def remove(duplicate):
    final_list = []
    found = set([])
    for num in duplicate:
        lst = []
        for element in num:
            if element not in found:
                found.add(element)
                lst.append(element)
        final_list.append(lst)
    return final_list

выход

[
    ['Acura', 'Alfa Romeo', 'Aston Martin', 'Audi'],
    ['Bentley', 'BMW', 'Bugatti', 'Buick'],
    ['Cadillac', 'Chrysler', 'Citroen'],
    ['Dodge', 'Ferrari', 'Fiat', 'Ford'],
    ['Geely', 'Honda', 'Hyundai', 'Infiniti'],
    ['Lamborghini'],
    ['Koenigsegg', 'Maserati']
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...