我正在尝试根据下面提供的模式在列表中查找重复项。假设我有一个像这样的列表列表,每个列表中的第二个值确定该项目是否重复(在这种情况下,第三个列表是重复的,因为它在中间与第一个列表具有相同的值“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])
...但正如我所说,我需要列表中的所有值。 这只是一个模式,我将在大数据上使用它。谁能帮我?预先感谢。
问题是您仅将
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)
要识别列表列表中的重复项,可以使用以下方法:
创建一个空字典来存储唯一列表和重复列表。
遍历列表列表。对于每个内部列表,检查是否已经遇到第二个元素(中间值)。
如果没有遇到第二个元素,则将内部列表添加到字典中的“unique”列表中,并将第二个元素标记为“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)