如何在理解中使用前哨列表?

月刊

我有一个清单

In [4]: a = [1, 2, 3, 3, 2, 4]

我想通过使用哨兵清单的理解力从中删除重复项(请参阅下面的原因):

In [8]: [x if x not in seen else seen.append(x) for x in a]
Out[8]: [1, 2, 3, 3, 2, 4]

似乎没有考虑到可见(既未更新,也未选中)。为什么会这样呢?

至于使用卷积方法的原因:我的列表的格式为

[{'a': 3, 'b': 4}, {'a': 10, 'b': 4}, {'a': 5, 'b': 5}]

并且我想根据特定键的值删除重复项(b在上述情况下,请离开[{'a': 3, 'b': 4}, {'a': 5, 'b': 5}](我不在乎删除哪个dict)。这个想法是用的值构建一个前哨列表,b并仅保留不b等于该前哨列表中任何元素的字典

马丁·彼得斯(Martijn Pieters)

由于x不在中seen,因此您永远不会将其添加到seen任何一个中;else当不执行的分支x not in seen是真实的。

但是,您正在使用条件表达式。总是产生一个价值;任一x或的结果seen.append()(这是None),所以你不过滤,你是映射在这里。

如果要过滤,请将测试移至循环某个if部分for

seen = set()
[x for x in a if not (x in seen or seen.add(x))]

既然您正在使用,seen.append()我想您正在使用一个列表。我改用了a set(),因为使用一组成员资格测试要快得多。

因此x仅当a)为true(因此我们已经看过)或返回true值(不为true)时才将其排除是的,即使有些麻烦,也可以使用。x in seenseen.append(x)None

演示:

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

将此应用于您的特定问题:

>>> a = [{'a': 3, 'b': 4}, {'a': 10, 'b': 4}, {'a': 5, 'b': 5}]
>>> seen = set()
>>> [entry for entry in a if not (entry['b'] in seen or seen.add(entry['b']))]
[{'a': 3, 'b': 4}, {'a': 5, 'b': 5}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在理解列表中使用 next 而不是 break

如何在python中使用列表理解

在理解中使用不同的单子

我如何在理论 inlinData 中使用 hashSet

如何在列表派生类中使用列表理解

如何在理解列表中迭代数据框的索引和列?

如何在列表理解中使用重新匹配对象

如何在以下场景中使用列表理解?

如何在理解中处理失败的未来

如何在python中使用列表理解来规范化列表列表

如何在Haskell中使用理解从嵌套列表中删除空列表

在列表理解中使用“ if”

如何在字典理解中使用if / else?

如何在字典理解中使用if / else?

如何在 Python 3 中使用条件解释嵌套字典列表理解

如何在Pyspark数据框中使用列表理解变量名称

如何在列表理解中使用正则表达式re.compile Match()或findall()

Python如何在带条件的列表理解中使用多个for循环

如何在Julia中使用map来模仿嵌套列表的理解?

如何在条件表达式中使用Python列表理解

我如何在列表理解中使用 If-else 和 for 循环

我在理解一段代码中使用的语法时遇到麻烦

在理解函數中使用新鍵擴展字典

如何在 python 中使用 zip 和列表理解展平 2D 列表并添加分隔符?

如何在理解中一次创建多个蝴蝶图?

如何在理解表达式中重用表达式?

在列表理解中使用数组?

如何在python的列表理解中使用赋值操作并将以下迭代代码转换为它?

我在理解如何使用自动版式的逻辑时遇到问题