【问题标题】:Keep only last value in list of lists when first item is duplicate in Python当 Python 中的第一项重复时,仅保留列表列表中的最后一个值
【发布时间】:2017-06-16 17:34:20
【问题描述】:

当列表的第一个值与列表中的另一个项目重复时,我想删除列表列表中的项目。

假设我有这个列表:

[['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']]

我只想保留最后一个值为 A 作为第一个索引的列表,如下所示:

[['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']]

【问题讨论】:

  • 您希望结果列表与原始列表的顺序相同,还是不重要?

标签: python list duplicates


【解决方案1】:

你可以用字典理解来做到这一点;因为它通过迭代一个值列表来建立一个字典,所以你总是会得到最后一个副本。然后,您可以简单地获取 dict 的值。

original = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']]
d = {elem[0]: elem for elem in original}
result = list(d.values())

【讨论】:

  • 我输入了完全相同的内容,然后我看到了你的答案。哈哈,反正+1。很好的答案。
  • 这仅适用于结果列表中的排序不重要的情况,因为它不会保留原始排序。
  • 非常感谢!这就像一个魅力。正如 Blotosmetek 评论的那样,顺序并不重要。
【解决方案2】:

使用itertools.groupby()函数:

import itertools
l = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']]
result = [list(g)[-1] for k,g in itertools.groupby(sorted(l), key=lambda x: x[0])]

print(result)

输出:

[['A', 'Value 5', 'Value 6'], ['B', 'Value 3', 'Value 4']]

【讨论】:

    【解决方案3】:
    l = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']]
    l.pop(0)
    print(l)
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    【解决方案4】:

    您也可以尝试这种方式,虽然它不是一个有效的解决方案。

    original = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6'],]
    first_element_count = []
    for ls in original:
        first_element_count.append(ls[0])
    seen, result = set(), []
    len_first_element=len(first_element_count)-1
    # finding the index of duplicate element and store the first index
    while len_first_element>=0:
        item = first_element_count[len_first_element]
        if item not in seen:
            seen.add(item)
        else:
            result.append(len_first_element)
    
        len_first_element = len_first_element - 1
    # removing the list from the list
    for i in result:
        del original[i]
    print(original)
    

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 2014-12-27
      • 2016-10-24
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多