python - 在许多列表中删除列表的唯一项
问题描述
我有这些列表是正确的,需要更正的场景在问题末尾的解释部分。
ps
['C:\\Users\\user\\Desktop\\sa\\43001\\PST\\PST.shp',
'C:\\Users\\user\\Desktop\\sa\\43003\\PST\\PST.shp']
和
db
['C:\\Users\\user\\Desktop\\sa\\43001\\DBOUND\\DBOUND.shp',
'C:\\Users\\user\\Desktop\\sa\\43003\\DBOUND\\DBOUND.shp']
我想比较这些列表,如果其中一个具有唯一的项目,则意味着 [-3] 位置是一个数字,因为 43001 是唯一的,那么应该删除该项目。最后,应该只保留具有相同数量项目的对。
我怎么做?
我的代码:
for i,v in list(zip(ps,db)):
if i.split("\\")[-3] not in v.split("\\")[-3]:
ps.remove(i)
解释
如果列表是这样的:
ps
['C:\\Users\\user\\Desktop\\sa\\43001\\PST\\PST.shp',
'C:\\Users\\user\\Desktop\\sa\\43003\\PST\\PST.shp']
和
db
['C:\\Users\\user\\Desktop\\sa\\43001\\DBOUND\\DBOUND.shp',
'C:\\Users\\user\\Desktop\\sa\\43003\\DBOUND\\DBOUND.shp',
'C:\\Users\\user\\Desktop\\sa\\43009\\DBOUND\\DBOUND.shp']
应该删除带有 43009 的项目,因为它不存在于ps
列表中,最终列表将如下所示:
ps
['C:\\Users\\user\\Desktop\\sa\\43001\\PST\\PST.shp',
'C:\\Users\\user\\Desktop\\sa\\43003\\PST\\PST.shp']
和
db
['C:\\Users\\user\\Desktop\\sa\\43001\\DBOUND\\DBOUND.shp',
'C:\\Users\\user\\Desktop\\sa\\43003\\DBOUND\\DBOUND.shp']
解决方案
您可以创建一组唯一 ID。然后使用该集合检查包含唯一 ID 的路径并相应地删除它们。像这样的东西:
def get_id(path):
return path.split('\\')[-3]
unique_ids = [get_id(path) for path in ps+db]
unique_ids = [id_ for id_ in unique_ids if unique_ids.count(id_)==1]
ps = [path for path in ps if get_id(path) not in unique_ids]
db = [path for path in db if get_id(path) not in unique_ids]
希望这可以帮助!
推荐阅读
- java - firebase 数据库数据中的混合数据
- reactjs - 更好地使用 useEffect 钩子而不需要使用回调
- asp.net - 即使 web.config 设置为允许,ASP.NET 也会为文件返回 401 Unauthorized?
- python - 基于使用预训练嵌入的词集的词义消歧
- heroku - Heroku 应用程序崩溃
- jenkins - Jenkins 和插件升级后的 Jenkins ActiveChoiceParam 异常
- r - 将多个数据帧的手段组合成一个数据帧,同时为每个数据帧显示一个名称
- scala - 使用 Intellij 从 scala 测试链接到 Suites 类运行单个测试
- javascript - 下一次迭代开始前的 API 调用在循环中开始
- chef-infra - 如何将所有以 .txt 结尾的文件从食谱复制到厨师的节点?