删除列表中反向重复项的 Pythonic 方法

标签 python python-2.7 duplicates

我有一个配对列表:

[0, 1], [0, 4], [1, 0], [1, 4], [4, 0], [4, 1]

我想删除所有重复的地方

[a,b] == [b,a]

所以我们最终只有

[0, 1], [0, 4], [1, 4]

我可以对反向对进行内部和外部循环检查,如果不是这种情况,则附加到一个列表中,但我确信有一种更 Pythonic 的方式来实现相同的结果。

最佳答案

如果需要保留列表中元素的顺序的话,可以使用sorted map 的函数和集合理解像这样:

lst = [0, 1], [0, 4], [1, 0], [1, 4], [4, 0], [4, 1]
data = {tuple(item) for item in map(sorted, lst)}
# {(0, 1), (0, 4), (1, 4)}

或者干脆没有像这样的map:

data = {tuple(sorted(item)) for item in lst}

另一种方法是使用 frozenset,如图所示 here但是请注意,这仅在您的列表中有不同元素时才有效。因为像 set 一样,frozenset 总是包含唯一值。因此,您最终会在子列表中获得唯一值(丢失数据),这可能不是您想要的。

要输出一个列表,您总是可以使用 list(map(list, result)),其中 result 是一组元组,仅在 Python-3.0 或更高版本中。

关于删除列表中反向重复项的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41164630/

相关文章:

python - 使用 br.submit() 时无法通过 Mechanize 获得正确的结果

python - 无法检索行

python - 使用 Python 从文本文件读取的行中的特殊行尾字符/字符串

python - Pandas Dataframe 复杂计算

python - 找到几个单词,如果删除一个字母将打印出这两个单词

MySQL:如何将重复键上的字段更新为 1 以外的值?

sql - 在Microsoft Access中使用查询来比较两个字段并查找多个匹配值

sql - 用配置单元中的一个单元替换多个具有特定字符的单元

python - 我应该如何使用 TF-IDF 对我收集的数据进行文本分类?

python - 受时间影响的错误(显然)的调试策略