如何去除列表中的重叠?

12 浏览
0 Comments

如何去除列表中的重叠?

我创建了一个示例的Python列表。

list_1 = [1,3,2,2,3,4,5,1]
print(list_1)

[1, 3, 2, 2, 3, 4, 5, 1]

为了去除重复项,我尝试使用set()。

print(set(list_1))

{1, 2, 3, 4, 5}

但是我想要得到

[1,3,2,4,5]

我想在列表中移除重复项,但是我同时也希望保持顺序不变。

该如何做到呢?

0
0 Comments

问题的出现原因是列表中存在重复的元素,需要将重复的元素移除。

解决方法一:使用collections.OrderedDict来获取唯一且有序的元素列表。

list_1 = [1,3,2,2,3,4,5,1]
from collections import OrderedDict
list(OrderedDict((x, None) for x in list_1))

输出结果为:[1, 3, 2, 4, 5]

解决方法二:使用列表推导式结合一个额外的已经出现的元素集合(set)。但是,具有副作用的列表推导式不被认为是最佳风格。

list_1 = [1,3,2,2,3,4,5,1]
seen = set()
[x for x in list_1 if not (x in seen or seen.add(x))]

输出结果为:[1, 3, 2, 4, 5]

条件`not (x in seen or seen.add(x))`的工作原理是:如果`x in seen`,那么`or`为真,因此`not`为假;但如果`x not in seen`,那么`or`的第一部分为假,因此执行第二部分并返回`None`,然后通过`not`转换为`True`。

感谢非常友善的解释。

0
0 Comments

出现的原因:需要在列表中删除重复的元素。

解决方法:使用一个集合(set)来记录已经出现过的元素,然后逐个遍历列表中的元素,如果元素不在集合中,则将其添加到集合中,并将其添加到新的列表中。通过这种方式可以实现去除重复元素的目的。

示例代码如下:

seen = set()
result = []
for i in the_list:
  if i not in seen:
    seen.add(i)
    result.append(i)

这里使用了一个集合(set)来实现快速查找,但是从`result.append`方法调用的时间复杂度来看,仍然不确定。

另一种方法是使用列表推导式,但是这种方法混合了函数式和命令式的代码,不太理想:

seen = set()
def process(e):
  seen.add(e)
  return e
[process(element) for element in the_list if element not in seen]

但是这种方法依赖于映射中的副作用,所以不太理想。

0
0 Comments

在处理列表时,有时候可能会遇到重复的元素。这可能会导致一些问题,例如计算结果的准确性或者数据的冗余。因此,需要找到一种方法来去除列表中的重复元素。

一种解决方法是使用列表推导和过滤器。首先,我们需要初始化一个空列表,用于存储去重后的元素。然后,我们可以使用列表推导的方式遍历原列表,并将不在新列表中的元素添加进去。这样,就可以得到一个没有重复元素的新列表。

以下是具体的代码实现:

list_u = []

[list_u.append(v) for v in list_1 if v not in list_u]

在这个代码中,变量list_u是用来存储去重后的元素的空列表。通过列表推导的方式,我们遍历原列表list_1,并对每个元素进行判断。如果该元素不在新列表list_u中,就将其添加进去。这样,最终得到的list_u就是一个没有重复元素的列表。

通过使用这种方法,我们可以有效地去除列表中的重复元素,以保证数据的准确性和简洁性。

0