提问人:qwer123 提问时间:11/17/2023 最后编辑:Barmarqwer123 更新时间:11/17/2023 访问量:76
如何在列表中查找重复项
How to find duplicates in the list
问:
我正在尝试根据下面显示的模式在列表中查找重复项。假设我有一个这样的列表列表,每个列表中的第二个值确定该项目是否是重复的(在这种情况下,第三个列表是重复的,因为它在中间具有与第一个列表相同的值“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])
...但正如我所说,我需要列表中的所有值。 这只是一种模式,我将对大数据使用它。谁能帮我?提前致谢。
答:
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
若要识别列表列表中的重复项,可以使用以下方法:
创建一个空字典来存储唯一列表和重复列表。
循环访问列表列表。对于每个内部列表,检查是否已经遇到第二个元素(中间值)。
如果未遇到第二个元素,请将内部列表添加到字典中的“唯一”列表中,并将第二个元素标记为“seen”。
如果遇到第二个元素,请将内部列表添加到字典中的“重复”列表中。
实现如下:
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)
评论
unique
duplicate
{'1': [['1', ...], ...], ...}
unique