首页 > 解决方案 > 如何在此列表理解中不重复?

问题描述

我正在尝试获取两个不同长度的列表,并尝试使用列表理解制作第三个包含相同数字的列表。我想避免重复。

正如我将在代码中展示的那样,我尝试将列表理解与 if 测试一起使用。我也尝试了一个 and 声明,但这不起作用。

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = [x for x in a if x in b]

这是我目前的解决方案,'我还尝试将 c 列表理解更改为:

c = [x for x in a if x in b and x not in c]

但这没有用。这不可能使用列表理解吗?我知道我可以很容易地使用集合来做到这一点。我只是在练习使用列表理解。

标签: pythonlistlist-comprehension

解决方案


根据您对 c 使用列表的原因,您可以考虑使用内置set结构进行交叉操作并保证元素的唯一性。例如,set(a)将生成一个包含a.

c = [x for x in a if x in b]不起作用,因为其中的重复元素a仍然包含在您的 if 语句中b,因此不会被您的 if 语句排除。(1在 中重复a,但两个元素都将包含在c您的第一个定义中,因为1is in b)。

编辑:如果您想简单地修改列表理解但继续使用它,您可以执行以下操作:c = [x for x in set(a) if x in b]


推荐阅读