2015-02-05 43 views
0

如果該項目未出現在我的任務列表Task中,我想返回Project中的項目。我的代碼只返回所有內容並在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']] 
+1

'Case'從哪裏來? – 2015-02-05 20:22:05

+0

項目名稱是否總是顯示在任務列表中的相同位置? – dylrei 2015-02-05 20:22:07

+0

像[['Project1','Andrew'],['Project2','Bob'],['Project3','Bob']]'這樣的對的列表看起來是字典的好候選者。實際上,字典構造函數接受'(key,value)'列表。 – 2015-02-05 20:25:26

回答

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 

,但將是大名單效率極其低下。有時間重新考慮你的數據結構!

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']] 
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 

(請注意,我改變了變量名,使他們匹配建議)。

此代碼首先創建一組存在的項目名稱。檢查集合中項目的存在比列表中便宜得多。

相關問題