python - 如何在此列表理解中不重复?
问题描述
我正在尝试获取两个不同长度的列表,并尝试使用列表理解制作第三个包含相同数字的列表。我想避免重复。
正如我将在代码中展示的那样,我尝试将列表理解与 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]
但这没有用。这不可能使用列表理解吗?我知道我可以很容易地使用集合来做到这一点。我只是在练习使用列表理解。
解决方案
根据您对 c 使用列表的原因,您可以考虑使用内置set
结构进行交叉操作并保证元素的唯一性。例如,set(a)
将生成一个包含a
.
c = [x for x in a if x in b]
不起作用,因为其中的重复元素a
仍然包含在您的 if 语句中b
,因此不会被您的 if 语句排除。(1
在 中重复a
,但两个元素都将包含在c
您的第一个定义中,因为1
is in b
)。
编辑:如果您想简单地修改列表理解但继续使用它,您可以执行以下操作:c = [x for x in set(a) if x in b]
推荐阅读
- android - 启动 expo 项目时“缺少 app.json”,而 app.json 已经存在
- c++ - C++,优先级队列的链表
- java - 无法在 Chrome 无头模式下运行测试
- axapta - 将 str2date 与还包含时间的字符串一起使用
- php - 来自数据库的 PHP 回显枚举类型
- python - 在 matplotlib scatter 中针对 x 和 y 绘制第三个变量?
- r - 将散点转换为单平均线图
- web-crawler - 启用 tika 配置时,TextExtraction 不起作用
- angular - 为什么在订阅块中没有调用 store.dispatch() ?
- jquery - 如何在 div 滚动顶部添加类并在 div 滚动时删除?