如果该项目没有出现在我的任务列表Project
中,我想从Task
返回项目。我的代码只返回Project
中的所有内容。我做错了什么?
Task = [['Task1','Project1',3],['Task2','Project4',6]]
Project = [['Project1', 'Andrew'],['Project2','Bob'],['Project3','Bob']]
not_in_list = [item for item in Project if item[0] not in Case]
print not_in_list
输出:
[['Project1', 'Andrew'], ['Project2', 'Bob'], ['Project3', 'Bob']]
预期结果:
[['Project2', 'Bob'],['Project3', 'Bob']]
答案 0 :(得分:2)
这就是诀窍:
Task = [['Task1','Project1',3],['Task2','Project4',6]]
Project = [['Project1', 'Andrew'],['Project2','Bob'],['Project3','Bob']]
no_tasks = [p for p in Project if all(p[0] not in t for t in Task)]
print no_tasks
但对于大型列表来说效率可能非常低。是时候重新考虑你的数据结构了!
答案 1 :(得分:0)
如果您可以假设项目名称始终位于任务的索引1中,则只比上一个答案稍微有效:
>>> Task = [['Task1','Project1',3],['Task2','Project4',6]]
>>> Project = [['Project1', 'Andrew'],['Project2','Bob'],['Project3','Bob']]
>>> assigned = [t[1] for t in Task]
>>> [p for p in Project if p[0] not in assigned]
[['Project2', 'Bob'], ['Project3', 'Bob']]
答案 2 :(得分:0)
task = [['Task1','Project1',3],['Task2','Project4',6]]
project = [['Project1', 'Andrew'],['Project2','Bob'],['Project3','Bob']]
task_projects = set(pr for _, pr, _ in task)
not_in_list = [item for item in project if item[0] not in task_projects]
print not_in_list
(请注意,我更改了变量名称,使其与建议相符。)
此代码首先创建一组项目名称。检查集合中项目是否存在比列表中的项目便宜得多。