python - python程序从嵌套列表中删除重复元素
问题描述
我是堆栈溢出的新手,所以如果我不清楚,请原谅。
目标:编写一个程序,删除前面嵌套列表中存在的元素
这是列表:
gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 12, 15], [6, 12], [5, 10, 15]]
所需的输出:gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 15], [5, 10]]
试图:
for i in range(1,len(gang)):
elem=gang[i]
for j in range(len(elem)):
for hey in range(i):
if elem[j] in gang[hey]:
elem.pop(j)
尝试的解释:
1)遍历列表帮派,我使用了一个for循环(范围是1,len(gang)bcs第0个元素不会改变,因为它是列表中的第一个)
2)我已经声明了一个变量,'elem',它等同于 gang[i],即 gang 的元素从 gang[1] 到 gang[-1]
3)现在,要遍历元素的元素,即每个嵌套列表的元素,我使用了另一个 for 循环
4) 使用最后一个 for 循环 (for hey in range(i)) 以便我可以确认 elem[j] 即嵌套列表的元素是否存在于前面的嵌套列表中,如果满足条件,elem[j] 将被移除
预期输出:
gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 15], [5, 10]]
输出:
if elem[j] in gang[hey]:
IndexError: list index out of range
问题:为什么会出现这个错误?潜在的解决方法?有没有更好的方法来实现目标?
解决方案
这里是。您创建一个访问过的列表,向后遍历每个子列表,并删除已访问过的元素:
gang=[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 6, 9, 12, 15], [6, 12], [5, 10, 15]]
visited = []
for lst in gang:
for i in range(len(lst)-1, -1, -1):
if lst[i] not in visited:
visited.append(lst[i])
else:
lst.pop(i)
print(gang)
#[[1], [7], [11], [13], [2, 4, 6, 8, 10, 12, 14], [3, 9, 15], [], [5]]
推荐阅读
- amazon-s3 - s3fs 使用 $HOME/.aws 中的凭据和配置,而不是 /passwd-s3fs 文件
- javascript - Discord.js v12:错误:从扩展器函数返回的类/原型必须扩展现有结构类/原型
- angular - 升级到 Angular 13 时,安装 @angular/localize@13.0.0 会出现 babel 依赖错误
- php - 为什么我在网络活动下的 firefox 和 chrome 开发工具中看不到 file_get_contents 请求?
- java - couchbase lite join 语句返回的文档比预期的多得多
- .htaccess - 如何避免在 htaccess 中出现错误代码 410 中的重定向
- autodesk-forge - 带 Forge 的房间
- mysql - 如何在数据库表列中搜索不可见字符?
- python - 在 python 自动化中完成的任务
- sql - 如何在 BigQuery 中创建临时表