如何在列表中查找重复项

How to find duplicates in the list

提问人:qwer123 提问时间:11/17/2023 最后编辑:Barmarqwer123 更新时间:11/17/2023 访问量:76

问:

我正在尝试根据下面显示的模式在列表中查找重复项。假设我有一个这样的列表列表,每个列表中的第二个值确定该项目是否是重复的(在这种情况下,第三个列表是重复的,因为它在中间具有与第一个列表相同的值“1”):

a = [['1', '1', '2'], ['2', '2', '3'], ['2', '1', '2']]

我想得到两个新列表,一个具有唯一值,另一个具有重复项:

unique = []
duplicate = []

所以在独特的我应该得到和重复[['1', '1', '2'], ['2', '2', '3']]['2', '1', '2']

重要的是,需要保留列表中的所有值。

我知道如何找到单个重复值并将它们分配给唯一和重复的列表......

for row in a:
    if row[1] not in unique:
        unique.append(row[1])
    else:
        duplicate.append(row[1])

...但正如我所说,我需要列表中的所有值。 这只是一种模式,我将对大数据使用它。谁能帮我?提前致谢。

Python 重复项

评论

0赞 Barmar 11/17/2023
为什么是列表的列表,但是字符串的列表?uniqueduplicate
0赞 deceze 11/17/2023
创建一个字典,其中包含用于确定重复项的值作为键,并将每个值作为列表列表。基本上,按第二个值对列表列表进行分组。() 然后在第二步中检查哪些列表只有一个条目,哪些列表有更多条目。{'1': [['1', ...], ...], ...}
1赞 Barmar 11/17/2023
@deceze我认为这是不对的。他们希望具有特定值的第一个项目是唯一的,而以下项目是重复的。
0赞 deceze 11/17/2023
@Barmar 也许吧。这有点令人困惑。但是制作字典仍然是一个有用的步骤,即使之后的使用略有不同。
0赞 Barmar 11/17/2023
@deceze 没错,你可以使用列表的字典,然后是每个列表的第一个元素。unique

答:

1赞 Barmar 11/17/2023 #1

问题是您只附加到结果列表,而不是整个 .row[1]row

使用单独的变量来保存已看到的值。row[1]

seen = set()
unique = []
duplicate = []

for row in a:
    if row[1] in seen:
        duplicate.append(row)
    else:
        seen.add(row[1])
        unique.append(row)
1赞 ayekaunic 11/17/2023 #2

若要识别列表列表中的重复项,可以使用以下方法:

  1. 创建一个空字典来存储唯一列表和重复列表。

  2. 循环访问列表列表。对于每个内部列表,检查是否已经遇到第二个元素(中间值)。

  3. 如果未遇到第二个元素,请将内部列表添加到字典中的“唯一”列表中,并将第二个元素标记为“seen”。

  4. 如果遇到第二个元素,请将内部列表添加到字典中的“重复”列表中。

实现如下:

a = [['1', '1', '2'], ['2', '2', '3'], ['2', '1', '2']]

unique_dict = {'unique': [], 'duplicate': []}
seen_elements = set()

for inner_list in a:
    middle_element = inner_list[1]
    if middle_element not in seen_elements:
        unique_dict['unique'].append(inner_list)
        seen_elements.add(middle_element)
    else:
        unique_dict['duplicate'].append(inner_list)

unique_list = unique_dict['unique']
duplicate_list = unique_dict['duplicate']

print("Unique list:", unique_list)
print("Duplicate list:", duplicate_list)