2015-04-06 74 views
0

我有5只列出了有如下記錄:創建指標列表

list1 = [1,2,3,4,7,13,19,21]  
list2 = [1,2,7,13,14,19,21] 
list3 = [3,5,6,15] 
list4 = [17,18] 
list5 = [20] 

我想創建一個列表,在列表的所有元素的結合,並指出其中原始名單,他們都存在。

output_list = [[1,True,True,False,False,False],[2,True,True,False,False,False],[3,False,False,True,False,False],...] 
+3

我不知道怎麼說CSV工作。 ID代表什麼?什麼是'cat1'? – 2015-04-06 09:39:44

+0

@ThomWiggers我可以做的。我需要這種格式的嵌套列表: [[1,True,True,True,True,True],[] ..] – SiMemon 2015-04-06 09:46:44

+0

它真的不清楚你想說什麼 – Hackaholic 2015-04-06 09:48:10

回答

1

爲了讓您的所有列表之間的結合,你可以使用set

然後,你只需要重複,所有的元素,通過你的所有列表,以測試該元素是在列表中:

table = [[i]+[i in l for l in (list1, list2, list3, list4, list5)] 
     for i in set(list1+list2+list3+list4+list5)] 

然後你可以,如果你想:

print('ID | cat1 | cat2 | cat3 | cat4 | cat5') 
for line in table: 
    print(' | '.join(line)) 

或使用csv模塊。

+0

我不想使用範圍函數,因爲如果您看到在所有5個列表中沒有「8」條目,仍然會顯示[8,False,False,False,False,False] – SiMemon 2015-04-06 10:04:11

+0

您可以使用['set '](https://docs.python.org/3.4/library/stdtypes.html?highlight=set#set)。我編輯過。 – 2015-04-06 10:07:48

+0

非常感謝!正是我期待的。 – SiMemon 2015-04-06 10:10:33

-2

你可以試試下面的代碼:

def in_list(list,ele): 
    if ele in list: 
     return 'True' 
    return 'False' 

csvlist = [] 
print "ID\tcat1\tcat2\tcat3\tcat4\cat5" 
for i in range(max(max(list1),max(list2),max(list3),max(list4),max(list5))+1): 
    print str(i)+"\t"+in_list(list1,ele)+"\t"+in_list(list2,ele)+"\t"+in_list(list3,ele)+"\t"+in_list(list4,ele)+"\t"+in_list(list5,ele)+"\n" 
    csvlist.append([i,in_list(list1,ele),in_list(list2,ele),in_list(list3,ele),in_list(list4,ele),in_list(list5,ele)])  
+0

你的函數會更好,因爲'lambda e,l:str(e in l)'(或作爲單行函數:'return str(e in l)')。但我相信先計算表格然後關心格式化,而不是混合兩者,會更好。 – 2015-04-06 09:55:48

0

試試你的預期輸出。

>>>[[i] + [i in j for j in [list1,list2,list3,list4,list5]] \ 
      for i in range(1, max(list1+list2+list3+list4+list5)+1)] 

#output 
[[1, True, True, False, False, False], 
[2, True, True, False, False, False], 
[3, True, False, True, False, False], 
[4, True, False, False, False, False], 
[5, False, False, True, False, False], 
... 
0

在這裏你去:

>>> for x in set(list1+list2+list3+list4+list5): 
...  [x]+map(lambda y:True and False or x in y, [list1,list2,list3,list4,list5]) 
... 
[1, True, True, False, False, False] 
[2, True, True, False, False, False] 
[3, True, False, True, False, False] 
[4, True, False, False, False, False] 
[5, False, False, True, False, False] 
[6, False, False, True, False, False] 
[7, True, True, False, False, False] 
[13, True, True, False, False, False] 
[14, False, True, False, False, False] 
[15, False, False, True, False, False] 
[17, False, False, False, True, False] 
[18, False, False, False, True, False] 
[19, True, True, False, False, False] 
[20, False, False, False, False, True] 
[21, True, True, False, False, False]