如何从列表中删除重复项 Python

⚡ 智能摘要

从数据中删除重复项 Python 可以使用多种内置方法创建列表,包括 set()、dict.fromkeys()、循环、列表推导式以及 NumPy 和 Pandas 的库方法,每种方法都在顺序保持和速度之间取得平衡。

  • 🔘 设置方法: set() 函数会立即返回不同的元素,但不会保留原始列表顺序。
  • ☑️ 秩序得以维持: dict.fromkeys() 和 OrderedDict 会删除重复项,同时保留ping 首次出现的插入顺序。
  • ✅ 手动: 使用 for 循环或列表推导式并进行成员检查,可以保持代码的有序性和可读性。
  • 🧪 库方法: NumPy unique() 和 Pandas unique() 对数据进行去重,并通过 tolist() 方法返回列表输出。
  • 🛠️ 哈希率限制: 集合和字典的键需要可哈希项,因此列表或字典需要基于循环的方法。
  • 🤖 人工智能工作流程: 使用 Pandas drop_duplicates() 对机器学习管道中的训练数据进行去重,以防止偏差和数据泄露。

从列表中删除重复项 Python

Python 从列表中删除重复项

列表是包含不同内容的容器 Python 对象,可以是整数、单词、值等。它相当于其他编程语言中的数组。

接下来,我们将介绍从给定列表中删除重复项的不同方法。 Python.

方法 1)使用 Set 从列表中删除重复项

要从列表中删除重复项,可以使用内置函数 set()。set() 方法的特点是它返回不同的元素。

我们有一个列表:[1,1,2,3,2,2,4,5,6,2,1]。该列表包含许多重复元素,我们需要移除这些重复元素,只保留不同的元素。我们将该列表传递给内置函数 set()。 Later 最终列表使用内置函数 list() 显示。

我们得到的输出结果是不同的元素,其中所有重复元素都被删除了。

例如:

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

输出:

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

方法 2)使用临时列表

要从给定列表中删除重复项,可以使用一个空的临时列表。为此,首先需要遍历包含重复项的列表,并将唯一项添加到临时列表中。 Later 临时名单被分配到主名单。

例如:

以下是一个使用临时列表的示例。

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

输出:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

方法 3)使用 Dict

我们可以通过从集合类中导入 OrderedDict 来删除给定列表中的重复项。该类从 Python 2.7 开始可用。OrderedDict 会按照键出现的顺序返回不同的元素。

让我们使用一个列表,并使用 OrderedDict 中提供的 fromkeys() 方法来获取列表中的唯一元素。

要使用 OrderedDict.fromkeys() 方法,必须从 collections 中导入 OrderedDict,如下所示:

from collections import OrderedDict

以下是使用 OrderedDict.fromkeys() 方法删除重复项的示例。

例如:

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

输出:

['a', 'x', 'y', 'b', 'c']

从 Python 从 3.5 版本开始,我们可以使用常规的 `dict.fromkeys()` 方法从列表中获取不同的元素。`dict.fromkeys()` 方法返回唯一的键,有助于去除重复值。

以下示例展示了如何使用 dict.fromkeys() 函数从列表中提取唯一项:

例如:

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

输出:

['a', 'x', 'y', 'b', 'c']

方法 4)使用 for 循环

运用 循环,我们将遍历项目列表以删除重复项。

首先将数组初始化为空,即 myFinallist = []。在 for 循环内部,检查列表中的元素是否存在于数组 myFinallist 中。如果不存在,则使用 append() 方法将该元素添加到数组 myFinallist 中。

因此,每当遇到重复项时,该项都已存在于数组 myFinallist 中,不会被再次插入。现在让我们通过下面的示例来验证这一点:

例如:

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

输出:

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

方法 5)使用列表推导

列表推导是 Python 用于使用已创建的序列创建新序列(例如列表、字典等)的函数。这可以帮助您减少较长的循环并使您的代码更易于阅读和维护。

让我们利用列表推导从给定的列表中删除重复项。

例如:

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

输出:

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

方法 6)使用 NumPy unique() 方法

NumPy 模块中的 unique() 方法可以帮助我们从给定的列表中删除重复项。

要使用 NumPy,首先需要导入 numpy 模块:

步骤1) 导入 NumPy 模块

import numpy as np

步骤2) 在 unique() 方法中使用包含重复项的列表。输出将使用 tolist() 方法转换回列表。

myFinalList = np.unique(my_list).tolist()

步骤3) 最后打印列表:

print(myFinalList)

最终代码及输出如下:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

输出:

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

方法 7)使用 Pandas 方法

Pandas 模块有一个 unique() 方法,它可以从给定的列表中为我们提供唯一的元素。

使用 Pandas 模块:

步骤1) 导入 Pandas 模块

import pandas as pd

步骤2) 在 unique() 方法中使用包含重复项的列表:

myFinalList = pd.unique(my_list).tolist()

步骤3) 打印列表:

print(myFinalList)

最终代码及输出如下:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

输出:

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

方法 8)使用 enumerate() 和列表推导

这里我们结合使用列表推导式和 `enumerate()` 函数来移除重复元素。`enumerate()` 函数返回一个对象,其中包含列表中每个元素的计数器。例如,`(0,1)`、`(1,2)` 等。其中,第一个值是索引,第二个值是列表项。

检查每个元素是否存在于列表中,如果存在,则将其从列表中删除。

例如:

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

输出:

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

常见问题

不。集合是无序的,所以 `set()` 返回的元素顺序可能与实际顺序不同。要去除重复项并保持顺序,请使用 `dict.fromkeys()` 或使用循环,每次循环只添加尚未出现的元素。

对于大型列表,当顺序无关紧要时,`set()` 是最快的,因为成员资格检查的时间复杂度为 O(1)。当顺序很重要时,`list(dict.fromkeys(my_list))` 的速度几乎一样快,并且能够在一行代码中保持元素首次出现的顺序。

`set()` 和 `dict.fromkeys()` 需要可哈希元素,因此它们不适用于列表或字典。可以遍历列表并添加尚未出现的元素,或者将每个元素转换为元组或 JSON 字符串作为临时键。

使用 list(dict.fromkeys(my_list))。因为 Python 3.7 版本的字典会保留插入顺序,因此键会保持首次出现的顺序。在早期版本中,可以使用 collections.OrderedDict.fromkeys() 来实现相同的结果。

不。诸如 `set()`、`dict.fromkeys()`、列表推导式以及 NumPy 或 Pandas 的 `unique()` 等方法都会创建一个新列表,而不会改变源列表。如果要覆盖源列表,请将结果重新赋值给同一个变量。

当数据已存在于数组或 Series 中,或者在进行数据分析时,请使用 `numpy.unique()` 或 `pandas.unique()`。注意,`numpy.unique()` 还会对值进行排序,而 `pandas.unique()` 则保持首次出现的顺序。要获取普通列表,请调用 `tolist()`。

机器学习流程会在训练前删除重复行,以避免重复样本对模型造成偏差,或导致训练集和测试集之间的数据泄露。Pandas 的 `drop_duplicates()` 函数是清理表格数据集的常用工具。

是的。GitHub Copilot 和智能 AI 助手可以根据注释生成 set()、dict.fromkeys() 或 Pandas 去重代码,建议使用保持顺序的选项,并重构循环,但您仍然应该验证不可哈希项等极端情况。

总结一下这篇文章: