Python 基于2个元素的列表重复删除列表列表

Python 基于2个元素的列表重复删除列表列表,python,pandas,csv,Python,Pandas,Csv,我有一个列表,如下所示: [[Joel,Green,597], [Katie,Higgins,623], [Joel,Green,123], ...] 我想通过查看名称和姓氏来删除列表中的元素(应该删除具有相同名称和姓氏的元素)。在上述示例中,结果列表应仅包含: [[Katie,Higgins,623]] 我尝试了以下代码,但只有当某些列表的三个元素都相同时,它才会执行重复删除: newlist = [] reader = csv.reader(f,delimiter=",") # rea

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

[[Joel,Green,597], [Katie,Higgins,623], [Joel,Green,123], ...]
我想通过查看名称和姓氏来删除列表中的元素(应该删除具有相同名称和姓氏的元素)。在上述示例中,结果列表应仅包含:

[[Katie,Higgins,623]]
我尝试了以下代码,但只有当某些列表的三个元素都相同时,它才会执行重复删除:

newlist = []
reader = csv.reader(f,delimiter=",")  # read content
my_list = list(reader) #put content in my_list
for i in my_list:
    if i not in newlist:
        newlist.append(i)
有人能帮忙吗?

使用:

从文档:

keep : {‘first’, ‘last’, False}, default ‘first’

first : Drop duplicates except for the first occurrence.
last : Drop duplicates except for the last occurrence.
False : Drop all duplicates.

由于您标记了熊猫,这里是熊猫的方式,使用
drop\u duplicates

pd.Series(l).apply(pd.Series).drop_duplicates([0,1],keep=False).values.tolist()
Out[1267]: [['Katie', 'Higgins', 623]]
更多信息:

l=[['Joel','Green',597], ['Katie','Higgins',623], ['Joel','Green',123]]

您最好在这里使用
计数器
,它跟踪包含此人姓名的元组。然后,我们可以执行两遍算法:

  • 首先构造
    计数器
  • 接下来过滤列表
  • 我们可以这样做:

    from collections import Counter
    from operator import itemgetter
    
    reader = csv.reader(f,delimiter=",")
    my_list = list(reader)
    
    getter = itemgetter(0,1)
    
    counter = Counter(map(getter, my_list))
    
    new_list = [item for item in my_list if counter[getter(item)] <= 1]
    从集合导入计数器
    从运算符导入itemgetter
    reader=csv.reader(f,分隔符=“,”)
    我的列表=列表(读卡器)
    getter=itemgatter(0,1)
    计数器=计数器(映射(getter,my_列表))
    
    new_list=[item for item in my_list if counter[getter(item)]这不是一个正确的列表。请修复。您的意思是
    谢谢您的回复。如何在单独的.txt文件中打印删除的项目的全名?通过使用
    csv
    库将其序列化回来
    from collections import Counter
    from operator import itemgetter
    
    reader = csv.reader(f,delimiter=",")
    my_list = list(reader)
    
    getter = itemgetter(0,1)
    
    counter = Counter(map(getter, my_list))
    
    new_list = [item for item in my_list if counter[getter(item)] <= 1]