python - 列表理解并不能消除重复
问题描述
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]
new_list = []
new_list.append([num for num in a+b if num not in new_list])
print(new_list)
输出:
[[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]]
为什么这段代码会产生重复,而不仅仅是一个没有重复的所有数字的列表set()
?
解决方案
new_list = [] new_list.append([num for num in a+b if num not in new_list])
有几件事阻止了它的工作。
要将一个列表的元素添加到另一个列表中,请使用
extend
notappend
。将整个列表append
附加到输入列表,而不是添加单个元素。即使您将其更改为
extend
,列表推导中的所有项目都会在添加到 之前生成new_list
。它们不会一一添加,因此not in new_list
检查不会看到以前迭代的项目。它将检查一个空的new_list
.
这个成语实际上只能作为一个显式循环。我想你是从这样的事情开始的:
new_list = []
for num in a+b:
if num not in new_list:
new_list.append(num)
这种类型的循环不能很好地转换为列表推导,因为它具有自依赖性。循环取决于先前迭代的结果。
推荐阅读
- phantomjs - Chrome 无头 - 火狐
- php - 将 .htaccess 重写规则转换为 PHP
- java - 删除 ArrayList 时出现 Java ConcurrentModificationException
- sql - SQL - 在分数范围的括号内输出平均满意度/促销次数
- excel - 根据范围内 2 个单元格的值添加单元格边框
- awk - 使用 awk 对唯一值进行求和和排序
- r - R Sys.getenv() 返回错误的值
- c# - 将 JSON 反序列化为 List
- java - Tomcat 的 Tomcat 池在 JMX 中缺少 DataSource 条目
- evernote - 开发者生产代币