Python 在列表列表中的每个列表中删除重复值

Python 在列表列表中的每个列表中删除重复值,python,Python,我有一个长长的列表,如下所示: mylist = [['1', 24, 'A', 'A'], ['1', 35, 'A', 'B', 'B'], ['2', 12, 'B', 'C', 'B']] 我想在每个列表中的前两个位置之后删除任何重复的值,所以对于 [1,24,' a ',' a ')< /> >,忽略位置 1 < /C>和 24 > /Cord>,然后考虑剩下的位置,看看是否有重复。对于这个列表,我需要输出['1',24',A']。列表长度是可变的,从3到8项不等 全部期望输出为:

我有一个长长的列表,如下所示:

mylist = [['1', 24, 'A', 'A'], ['1', 35, 'A', 'B', 'B'], ['2', 12, 'B', 'C', 'B']]

我想在每个列表中的前两个位置之后删除任何重复的值,所以对于<代码> [1,24,' a ',' a ')< /> >,忽略位置<代码> 1 < /C>和<代码> 24 > /Cord>,然后考虑剩下的位置,看看是否有重复。对于这个列表,我需要输出

['1',24',A']
。列表长度是可变的,从3到8项不等

全部期望输出为:

output = [['1', 24, 'A'], ['1', 35, 'A', 'B'], ['2', 12, 'B', 'C']]

每个列表中的顺序很重要,但不是列表中所有列表的总体顺序

您可以将解包与一组:

mylist = [['1', 24, 'A', 'A'], ['1', 35, 'A', 'B', 'B'], ['2', 12, 'B', 'C', 'B']]
new_list = [[a, b, *[h for i, h in enumerate(c) if h not in c[:i]]] for a, b, *c in mylist]
输出:

[['1', 24, 'A'], ['1', 35, 'A', 'B'], ['2', 12, 'B', 'C']]

您可以使用
collections.ordedirect
删除重复项。它将保持元素的顺序

from collections import OrderedDict

mylist = [['1', 24, 'A', 'A'], ['1', 35, 'A', 'B', 'B'], ['2', 12, 'B', 'C', 'B']]
[[a,b, *list(OrderedDict.fromkeys(c))] for a,b,*c in mylist]
这将产生输出

[['1', 24, 'A'], ['1', 35, 'A', 'B'], ['2', 12, 'B', 'C']]
编辑

正如
Mykola Zotko
的评论中提到的,在python 3.7中,您也可以安全地使用
dict

[[a,b, *list(dict.fromkeys(c))] for a,b,*c in mylist]

从中安装订购的_集

输出将是

[1',24',A'],[1',35',A',B'],[2',12',B',C']]


我已经修改了Ajax1234的解决方案。您可以使用一个小的辅助函数来过滤其余的元素。中的运算符
处理集合的速度比处理列表的速度快得多:

mylist = [['1', 24, 'A', 'A'], ['1', 35, 'A', 'B', 'B'], ['2', 12, 'B', 'C', 'B']]

def filt(l):
    s = set()
    for i in l:
        if i not in s:
            s.update(i)
            yield i

l = [[i, j, *filt(k)] for i, j, *k in mylist]
输出:

[['1', 24, 'A'], ['1', 35, 'A', 'B'], ['2', 12, 'C', 'B']]

使用
set()
的原始答案似乎很好地保留了顺序,这是意外的吗?@这只是巧合,因为
set
会自动返回排序结果。碰巧您的示例输入包含已排序的尾随值。效率非常低。为c中的每个元素创建一个新列表。另外,
中的操作符
对列表的处理速度不是很快。在Python 3.7中,默认情况下dict的顺序是:
dict.fromkeys()
mylist = [['1', 24, 'A', 'A'], ['1', 35, 'A', 'B', 'B'], ['2', 12, 'B', 'C', 'B']]
result = [x[0:2] + list(set(x[2:])) for x in mylist]
print(result)
[['1', 24, 'A'], ['1', 35, 'A', 'B'], ['2', 12, 'C', 'B']]