创建指标列表

时间:2015-04-06 09:36:48

标签: python python-2.7 python-3.x

我有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],...]

4 个答案:

答案 0 :(得分: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模块。

答案 1 :(得分: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],
...

答案 2 :(得分: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]

答案 3 :(得分:-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)])