【问题标题】:remove duplicates from a multidimensional list (python)从多维列表中删除重复项(python)
【发布时间】:2018-08-27 16:11:21
【问题描述】:

我正在尝试从多维列表中删除重复项。我的目标是删除列表中相同的项目。

例如:List 2、List 6 和List 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']
 ]

【问题讨论】:

  • 您要删除哪一个?你能接受输出是一个列表吗?
  • 修正缩进。现在,您的代码无法粘贴到编辑器中并在没有语法错误的情况下执行。
  • 并发布想要的输出
  • 缩进固定并添加了所需的输出。

标签: python python-3.x list


【解决方案1】:

你可以这样做:

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']
]

【讨论】:

  • 这正是我所需要的。感谢您的快速回复!
【解决方案2】:

您可以将 memoization 用于此目的。将 每个元素的第一次出现 存储在 list 中,比如说 list F。如果一个元素不在 F 中,那么它是唯一的。将唯一元素存储在 F 中并重复该过程。

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2011-09-29
    • 2013-08-03
    • 2018-11-20
    • 2015-04-23
    • 2018-07-26
    相关资源
    最近更新 更多