如何在列表中查找重复项

问题描述 投票:0回答:2

我正在尝试根据下面提供的模式在列表中查找重复项。假设我有一个像这样的列表列表,每个列表中的第二个值确定该项目是否重复(在这种情况下,第三个列表是重复的,因为它在中间与第一个列表具有相同的值“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 duplicates
2个回答
0
投票

问题是您仅将

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)

0
投票

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

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

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

  3. 如果没有遇到第二个元素,则将内部列表添加到字典中的“unique”列表中,并将第二个元素标记为“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)
© www.soinside.com 2019 - 2024. All rights reserved.